从具有信任等级效果的组中移除用户不会重新计算该用户的自动组成员资格

我已阅读该主题 https://meta.discourse.org/t/group-trust-level/314024,其中提到:

以及这个较旧的主题 Should losing group membership unlock trust level?

其中描述的情况在很大程度上符合我的经验:

但是,我在自己的 Discourse 测试实例中发现的是这个……

在所有信任级别设置都为默认值的情况下,我有一个 TL1 帐户(U)和一个名为 tl3 的组,该组授予 Trust_Level_3

  1. 起始条件
    • 信任级别: 1: basic user Unlocked
    • 自动组: trust_level_0, trust_level_1
    • 自定义组: None
  2. U 添加到 tl3
    • 信任级别: 3: Regular Unlocked
    • 自动组: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • 自定义组: tl3
  3. Utl3 中移除
    • 信任级别: 2: Member Unlocked
    • 自动组: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • 自定义组: None
    • 注意: 尽管信任级别为 2,但用户仍属于自动组 trust_level_3。根据理解,用户在未锁定信任级别的情况下不能降级到 TL1,因此预期的结果是用户应立即失去 trust_level_2 自动组的成员资格。
  4. 锁定 U 的信任级别
    • 信任级别: 2: Member Locked
    • 自动组: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • 自定义组: None
    • 注意: 尽管信任级别为 2: Member,但用户仍属于自动组 trust_level_3
  5. 解锁 U 的信任级别
    • 信任级别: 1: Basic Unlocked
    • 自动组: trust_level_0, trust_level_1
    • 自定义组: None

因此,在取消用户加入具有信任级别影响的组时,信任级别会自动即时重新计算,但自动组的成员资格不会重新计算,除非用户的信任级别发生解锁事件。

我的假设是,自动组的成员资格是系统范围内为所有用户每天计算一次,届时会自动组的成员资格将得到纠正。但感觉上,自动组的成员资格应该在用户从具有信任级别影响的组中移除时触发,或者在信任级别发生任何更改时立即触发,而不仅仅是在信任级别增加时触发。

因此,后端 API 调用,

POST {{site}}/admin/users/{{userId}}/groups

会更新自动组的成员资格,但

DELETE {{site}}/admin/users/{{usedId}}/groups/{{groupId}}

不会,这感觉像是一个错误,特别是如果您使用自动信任级别组进行访问控制。

而且,为了完整起见,显然调用,

PUT {{site}}/admin/users/{{userId}}/trust_level

当在管理界面中手动更改用户信任级别时,会立即按预期重新计算自动组的成员资格。

2 个赞

是的,这里根本的开发体验问题是,我们应该禁止这种对自动用户组的篡改,并强制你使用 PUT {{site}}/admin/users/{{userId}}/trust_level 路径来转换内容。如果有人试图使用端点手动将用户添加到用户组或从中移除,则返回 422 或类似错误。

信任等级的取消应该始终从这里进行:

因为这也能支持锁定,这非常关键。

我明白了。

我只是想说清楚,所有 API 的东西都是在通过组成员身份 UI 执行组成员身份操作时,记录 XHR 流看到的。我实际上并没有将它们作为 API 调用来执行,它们只是在使用 UI 时发出的 API 调用。

所以,我的想法是,如果有一个具有 TL3 效果的组,点击这个按钮,

应该会立即将他们从 trust_level_3 组中移除,如果他们不符合信任级别 3 的要求或该信任级别被锁定。

设想中的用例是允许,比如说,一群 TL4 用户被设置为具有 TL3 效果的组的所有者,这样他们就可以手动提升人们到 TL3。

提升方面有效,但同一批用户从 TL3 效果组中移除某人,并没有立即将受影响的用户从 trust_level_3 中移除的效果。

完全理解这在很大程度上是该功能的非官方用法。

这似乎不协调,因为用户可以将他们的信任级别从 3 更改为 2,但仍然保留在 trust_level_3 组中,直到下一次重新计算事件。

2 个赞