为匿名和登录用户设置基于组的细粒度权限

在我们的代码库中,有一个历史上令人困惑的伪组 @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 选为组的设置将自动转换为 logged_in_users ID,因此切换该变更时不会更改站点设置表中的数据。当该变更成为永久性变更后,我们将对所有组设置进行数据迁移以完成此更改。

此外,我们已将 anonymous 标记为某些站点设置的 disallowed_group,因为在这些设置中允许匿名用户毫无意义,例如 personal_message_enabled_groups

那标签和分类权限呢?

这些权限将保持不变,因为它们的“所有人”概念在几个方面有所不同,且不依赖于底层的自动组。

3 个赞

等等……这是怎么回事😳 这是否意味着,当该功能启用后,所有当前对公众(所有人)开放的类别都将变为需要登录才能访问的封闭类别?

[quote=“martin, post:1, topic:402273”]
任何将 everyone 选为指定组的设置,都会自动转换为 logged_in_users ID。[/quote]

不,因为:

这仅影响当前允许你选择“所有人”的群组列表类型站点设置,如下所示:

1 个赞