Детальные разрешения на основе групп для анонимных и авторизованных пользователей

В нашей кодовой базе исторически существовал запутанный псевдогруппа @everyone, которая может использоваться для:

  • Настроек сайта типа group_list
  • Разрешений категорий
  • Групп тегов

В некоторых случаях люди интерпретируют @everyone как «все анонимные и все авторизованные пользователи», а другие понимают это как только «все авторизованные пользователи». В реальности для настроек сайта в большинстве случаев это означает только «все авторизованные пользователи».

Дополнительную путаницу вносит тот факт, что эта группа @everyone может использоваться в настройках сайта, где бессмысленно предоставлять доступ функции «всем анонимным и авторизованным пользователям», например, pm_tags_allowed_for_groups.

Это также создает путаницу с точки зрения управления флагами функций и удобства разработки, поскольку для некоторых будущих изменений или других настроек мы действительно можем захотеть включить их для «всех анонимных и авторизованных пользователей».

Решение

Мы вводим две отдельные автоматические псевдогруппы:

  • anonymous (ID 4) — представляет анонимных пользователей, посещающих ваш сайт без учетной записи
  • logged_in_users (ID 5) — представляет всех авторизованных пользователей вашего сайта, аналогично по эффекту автоматической группе trust_level_0, но более специфично

Эти группы уже были добавлены, но будут действовать только после включения будущего изменения granular_anonymous_and_logged_in_groups_permissions на вашем сайте.

Когда будущее изменение будет включено, любое значение с выбранным группой everyone будет автоматически преобразовано в ID logged_in_users, поэтому данные в таблице настроек сайта не изменятся при переключении будущего изменения. Когда будущее изменение станет постоянным, мы выполним миграцию данных для всех групповых настроек, чтобы внести это изменение.

Кроме того, мы помечали группу anonymous как disallowed_group для нескольких настроек сайта, где это не имеет смысла, например, personal_message_enabled_groups.

А как насчет разрешений тегов и категорий?

Эти разрешения останутся без изменений, поскольку их концепция «всех» отличается несколькими способами и не зависит от лежащей в основе автоматической группы.

3 лайка

Подождите… что? :flushed_face: Это значит, что все категории, которые сейчас открыты для всех (everyone), станут закрытыми и потребуют входа в систему, когда эта функция будет включена?

Нет, потому что:

Это касается только настроек сайта типа «список групп», которые в настоящее время позволяют выбирать «всех» следующим образом:

1 лайк