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

**URL:** https://meta.discourse.org/t/granular-group-based-permissions-for-anonymous-and-logged-in-users/402273
**Category:** Announcements
**Tags:** groups
**Created:** [2026年五月13日 01:18 UTC](https://meta.discourse.org/t/granular-group-based-permissions-for-anonymous-and-logged-in-users/402273 "2026-05-13T01:18:57Z")
**Posts on this page:** 1
**Showing post:** 7

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [2026年六月8日 05:23 UTC](https://meta.discourse.org/t/granular-group-based-permissions-for-anonymous-and-logged-in-users/402273/7 "2026-06-08T05:23:46Z")

</div>

查看这些组件，`currentUser?.groups` 无论如何都不可靠，因为它仅包含用户的_可见_群组，而可能影响权限的所属群组可能并未在此处序列化：

> <https://github.com/discourse/discourse/blob/ba3e2d766b97294a2d20cc586e6926fea41131a3/app/serializers/current_user_serializer.rb#L127-L138>

我们在核心插件中通过在当前用户序列化器中执行类似以下操作来解决这个问题：

> <https://github.com/discourse/discourse/blob/ba3e2d766b97294a2d20cc586e6926fea41131a3/app/serializers/current_user_serializer.rb#L210-L212>

但显然，主题组件和主题及其设置无法使用此方法。

> [@Moin](#):
>
> 问题是，即使我明确选择了 `everyone`，它也会变为 `logged_in_users`。我是否需要为此创建自定义迁移，以便当前使用 `everyone` 的管理员在未来仍能拥有针对未注册用户的过滤器？这个迁移需要在何时执行？还是说在你运行迁移后，每位管理员都需要单独进行更改？

嗯，我不太确定，需要再想想。如果你确实是指 `everyone`，那么它需要同时更改为 `logged_in_users` 和 `anonymous_users`。正如原帖所述，这是 `everyone` 的主要问题——有些人认为它仅指已登录用户，而另一些人则认为它指已登录用户加匿名用户，这非常依赖于具体情境。

我选择了“仅已登录用户”这一解释，因为从安全角度来看这更稳妥。

> [@Moin](#):
>
> 感觉我好像忽略了什么重要的东西。毕竟，该更改默认启用已近一周。因此我假设，如果需要调整，官方组件应该已经更新了。

不，我只是没考虑到主题组件和主题及其设置会如何受到此更改的影响，我当时主要关注的是站点设置。像这类问题尤其难以发现，因为它甚至没有使用 `AUTO_GROUPS` 常量：

![image](https://global.discourse-cdn.com/meta/original/4X/a/8/7/a873b55095acab45b5d0a9bfd91e66d67503d996.png)

总之，我会针对这些问题想出一些解决方案，在找到解决方法之前，我不会将此更改推进到稳定版。

---

_[View the full topic](https://meta.discourse.org/t/granular-group-based-permissions-for-anonymous-and-logged-in-users/402273)._
