非员工用户可以应用仅限员工的标签

我昨天更新了我们的网站,刚刚发现一位非工作人员用户将我们的“精选”标签用在了他的帖子中。这不应该发生,因为该标签被定义为仅限工作人员使用。当我模拟该用户身份时,果然发现他在发帖时可以访问受限标签。我尝试在 meta 上复现这个问题,但我想普通用户可能无法使用标签?

我尝试在本地开发站点上复现该问题,但至今未能成功。请问该问题是否出现在您站点的所有分类中,还是仅出现在某个特定分类中,且该分类允许非工作人员用户添加工作人员标签?任何有助于复现该问题的提示都将非常有用。

好的,我会深入查看具体情况,稍后回复您。这可能需要一点时间。

好的,我在安全模式下使用 TL-0 和 TL-1 用户进行了测试,可以访问我们论坛每个类别的版主标签。我们“仅限版主”列表中的其他标签也是如此。我还将“仅限版主”标签组的权限重置为“所有人都可使用标签”,然后又改回“仅限以下组可使用”,但这没有任何变化。还有其他可以测试的内容吗?

您是否定义了其他标签组,还是上述截图是您网站上唯一的组?您测试过的用户是否属于任何其他组?

可以创建多个具有冲突规则的标签组。如果用户有权限在_任何_标签组中使用某个标签,这将抵消其他组中规定其不能使用该标签的规则。

这些是我使用的所有群组;我进行的测试是针对一个不属于任何群组的普通用户。

通用标签:对所有人可用

事件:仅限在“事件”分类中使用:

当你说“访问”时,是指你能将它们添加到话题中,还是指你能查看它们并点击它们等?

你“员工标签”标签组中的标签(如 ba-tips、cant-reproduce、featured 等)只能由属于 staff 组的用户添加到话题中,但所有人都可以查看。这意味着任何人都可以在话题顶部看到这些标签,点击标签以查看带有该标签的其他话题等。

如果 TL0 用户能够将“员工标签”(例如 ‘ba-tips’)添加到话题中,那就是一个问题。我已在本地 Discourse 实例中根据你提供的截图重新创建了标签/标签组(将每个标签组中的标签限制为上述截图中每个组的前三个),我的 TL0/TL1 用户无法通过“新建话题”按钮将 ‘ba-tips’ 添加到话题中,也无法在创建话题后通过编辑来添加。你是否可以通过其他方法或 UI 路径添加这些标签?

感谢你的回复,Jamie。抱歉我之前表达得不够清楚。我刚升级到最新版本并重新运行了测试,结果依然相同。复现步骤如下:

  1. 以 TL0 或 TL1 用户身份登录
  2. 切换到安全模式并禁用所有内容
  3. 选择任意分类
  4. 创建新主题
  5. 选择“精选”标签(仅限工作人员)
  6. 点击“创建主题”
  7. 帖子已创建,且“精选”标签已成功添加

我刚刚还看到另一个可能相关的现象:我无法再访问 tag.json 路由,例如:

Topics tagged featured

更新:哎呀,不用管了。看起来 /tags/ 被重命名为 /tag/ 了,这导致我们的一些自动化脚本失效了。

遗憾的是,我仍然难以为此问题创建测试用例。以下是我已采取的步骤:

  1. 在提交 6490fac881 创建了新站点
  2. 创建了管理员用户:jamie.wilson
  3. 启用了站点设置:启用标签功能
  4. 创建了以下标签:
    360-renders
    add-ons
    advertisement
    conference
    contest
    meetup
    no-ads
    promotion-offered
    ba-tips
    cant-reproduce
    featured
  5. 按照提供的屏幕截图创建了标签组(为便于调试,每组不超过 3 个标签)
  6. 创建了“Events”分类,并将“将此标签组限制为此分类”的值设为“Events”
  7. 管理员用户在“Site Feedback”分类中创建了带有来自 staff 组的“ba-tips”标签的主题
  8. 登出管理员用户
  9. 创建新用户(通过电子邮件链接激活):normal.user
  10. 以 normal.user 身份在“Uncategorized”或“Site Feedback”中创建新主题。可用标签:360-renders, add-ons, advertisement

  1. 在“Events”中创建新主题。可用标签:conference, contest, meetup

(未显示)

  1. 管理员用户可以为 normal.user 的帖子添加受限标签:

  1. 管理员用户可以看到所有三个标签:

  1. normal.user 只能看到两个标签:

DiscourseTagging.permitted_tag_names(Guardian.new(User.find_by_username('normal.user')))
["360-renders", "add-ons", "advertisement", "conference", "contest", "meetup"]
DiscourseTagging.hidden_tag_names(Guardian.new(User.find_by_username('normal.user')))
["no-ads", "promotion-offered"]

也许其他人能够复现此问题?目前我尚无法复现。

我想我找到问题了:#featured 同时出现在了仅限工作人员的列表和我们的“通用标签”列表中。我不确定它是怎么出现在那里的,我得检查一下我们的工作人员权限,看看是否是他们以某种方式创建的。抱歉浪费了您的时间,但我非常感谢您的支持!:pray:

没问题!很高兴找到了根本原因,现在我们可以更有信心地确认新功能按预期运行了。

希望配置问题已解决后,它能为您的网站带来帮助。请随时告知我们使用效果如何。