阻止用户在其他类别中移动主题

我正在寻找一个禁用此功能(移动主题到其他分类)的选项,因为它可能会在您拥有不同分类的不同版主团队时,在管理主题方面带来一些复杂性,并且他们可能会在没有任何事先通知的情况下突然发现一个大型或有争议的主题出现在他们的分类中。

我在这里阅读了 https://meta.discourse.org/t/access-rights-for-moving-a-topic-to-another-category/133435,但它说只有信任等级 3 才能做到。我有一个测试环境,其中信任等级 2 的用户能够做到这一点。

我尝试启用“在工作人员编辑帖子后禁用编辑”,但这似乎并没有影响更改主题分类的能力。

我是否遗漏了什么?我可能遗漏了 :smiley:

2 个赞

不确定,需要做一些测试。类别组模组可能仍然可以通过编辑或移动命令来移动主题。

您可能还想研究一下#plugin自定义信任级别。

我已对此进行检查,并将予以考虑,但我将首先尝试创建一个简单的组件,除了工作人员之外,隐藏该选择框以进行编辑。

我更喜欢做简单事情的插件 :slight_smile:

1 个赞

@Canapin 为我提供了一段代码,用于隐藏特定群组之外的群组的点赞按钮。

这可以为您提供一个很好的基准。

已修复链接

2 个赞

非常感谢 @Heliosurge(以及无处不在的 @Canapin :stuck_out_tongue: ),我正在想在哪里可以找到类似的插件作为示例 :slight_smile:

2 个赞

不客气!我的经验是,团队和这个社区都很棒。:clinking_beer_mugs::smiling_face_with_sunglasses::+1:

2 个赞

我看了一下,这是一个不错的最小可行产品(MVP),但我寻找的社区在技术方面非常精通,如果 DOM 完全跳过绘制该组件而不是仅仅将其隐藏起来会更好。

这是否需要插件,还是我可以通过组件以某种方式实现?

我大致需要做的是,根据角色确定该下拉菜单的 HTML 是否已生成。

1 个赞

我认为一个组件就足够了。

1 个赞

我不是程序员。

要隐藏编辑第一个帖子时(从编辑帖子操作,而不是编辑标题)的类别选择器,可以使用以下方法:

<script type="text/discourse-plugin" version="1.6.0">
    let currentUser = api.getCurrentUser();
    api.modifyClass("component:composer-title", {
      pluginId: "PreventCategoryChange",
      didInsertElement: function() {
        if(currentUser.trust_level == 1) {
            let categoryInput = document.getElementsByClassName('category-input')[0];
            let miniTagChoser = document.getElementsByClassName('mini-tag-chooser')[0];
            if(categoryInput != null) {
                categoryInput.remove();
                if(miniTagChoser != null) {
                    miniTagChoser.style.marginLeft = '0';
                }
            }
        }
      }
    });
</script>

chrome_NTAAc37JXB

我使用了信任级别,但我想你可以根据用户组来管理,这都在 currentUser 对象中。

我不知道如何动态删除编辑标题时的类别选择器。
也许你可以从以下相关文件中找到线索:

2 个赞

非常感谢您 @Canapin

我还需要为标题的编辑添加一些内容,但这已经非常有帮助了 :slight_smile:

完成后,我会在主题组件部分发布,以便其他人也能使用 :wink:

2 个赞

这个 discourse/app/assets/javascripts/discourse/app/templates/topic.hbs at 53695e7d29e718041fa53bf4fef21e02354a4088 · discourse/discourse · GitHub
似乎是访问它的正确句柄,现在有人知道如何通过主题组件与之交互吗…… :stuck_out_tongue:

1 个赞

为了神圣的爱,我找不到一个钩子来检测标题编辑何时被触发。有人知道我能监听什么吗?

隐藏编辑主题首条消息时类别更改的功能有效,它仅在编辑模式下检测,仅此而已。

1 个赞

多亏一位失眠的朋友,我们才找到了正确的钩子 :stuck_out_tongue:

它还可以调整表单视觉效果,并允许选择一个最低信任级别,从该级别开始,编辑类别将可用(默认信任级别为 0,以与默认的 discourse 设置保持一致)。

我现在就去 Plugin 部分创建一个新主题。

非常感谢 @Canapin 在一开始就指明了正确的方向 :heart_eyes:

3 个赞

我看了你的代码,干得漂亮 :+1:

我相信你教会我的比我教会你的要多!

只是提醒一下,你创建的是一个 Theme component,而不是 Plugin :slight_smile:

2 个赞

谨此说明,只要启用了“受信任用户可以编辑他人的帖子”,信任等级 3 和 4 的用户就可以重新分类任何主题。信任等级 0/1/2 用户应该只能在他们自己的主题中进行操作,并且仅在他们的编辑时间段内进行操作 [1]。如果使用帖子扳手锁定第一篇帖子,那么也应该阻止对类别(以及标题和标签)的编辑。

我不太确定我是否理解你的用例,但我很高兴你找到了解决方案。:slightly_smiling_face::+1:


  1. 由信任等级 0 和 1 的 post edit time limit 以及信任等级 2 和 3 的 tl2 post edit time limit 设置 ↩︎

3 个赞

啊,是的,我不知道这个选项:

它阻止了任何进一步的修改(除了被删除),即使是来自版主。

但是,帖子的首次锁定无法通过主题计时器或自动化任务来自动完成。

1 个赞

是的,我注意到了。\n\n但是,我的目的是防止版主处理多次类别跳转,这可能会导致版务复杂化,因为一个主题先在一个类别中,然后又移到另一个类别等等。

1 个赞

我认为添加此功能很重要,因为它是主题组件,用户可以通过注入 JavaScript(我认为)或启用安全模式(如果可用)(请参阅 enable safe mode 设置)来规避这些限制。

如果您想要一种更安全的方法,则需要一个插件。

2 个赞

是的,这也是我正在研究插件的原因,但对于第一个版本来说,一个组件就足够了。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.