阻止用户更改其全名

大家好,

在我们管理的论坛上,虽然我们允许用户随意更改用户名,但我们在使用条款中要求用户提供全名,并且除非是法律姓名变更,否则不得更改。我们用户还不多(不到 250 人),但已经有人开始不遵守这条规则了。因此,我们需要一种方法来强制执行它。

简而言之,我们需要全名只能由版主或管理员在账户获得批准后才能更改。Discourse 是否有办法实现这一点?我已浏览了文档,但一无所获。

如果没有,能否将此功能添加到代码中?

谢谢。

3 个赞

一个简单但可以避免的解决方案是使用 CSS 隐藏编辑按钮。聪明的人仍然可以编辑它。要强制保留它,您需要一个插件,或者可能是 sso。

4 个赞

感谢您的回答。您知道是否已经存在这样的插件?如果没有,我会尝试理解如何做到这一点,但自从我上次编写代码以来已经很久了:frowning:

2 个赞

似乎该插件不存在,但 CSS 变通方法只是在 Firefox 或 Chrome 中检查您要隐藏的框并编辑主题中的 CSS:

2 个赞

我认为这里最强大的选择是使用外部身份验证提供商(OAuth whatever)并启用“auth overrides username”选项:

每次登录时,用外部站点的全名覆盖本地全名,并阻止本地更改。适用于所有身份验证提供商。

1 个赞

这能解决问题,但包含第三方服务,对于我们许多乐于让用户选择自己的电子邮件提供商的人来说,这并不是一个好选择。

“外部”的意思是“外部于 discourse”,而不是“第三方”。你可以使用第三方解决方案,也可以自己运行。

我们对自己的信任与信任 Discourse 核心团队不同,他们是构建了整个系统的顶尖专业人士。

我的观点是,您最强大的解决方案并非最优雅的,不应该通过开关来禁用该选项。

1 个赞

您好,
感谢您的建议,但不幸的是,这目前不可行。我们没有集中的 SSO,而且其管理比我想要的要复杂得多!

目前,CSS 篡改可能是我能做的极限。我管理的是一个俱乐部论坛,所有成员都已识别,强制进行此更改(尽管可以轻松禁用它,并且规则中也禁止了)将导致用户的帐户被设为只读或完全禁用。

感谢 @satonotdead 提供的链接,我将浏览这些内容,看看是否可以轻松地进行更改。从长远来看,当我(可能需要等到退休 15 年后 :sweat_smile:)有时间时,我可能会选择投入精力编写一个插件……

2 个赞

@AriesFR,混合解决方案可行吗?

如果您采纳 Jay @pfaffman 的建议,使用 CSS 隐藏它,然后创建一个自定义用户字段,并将设置设为:

:thinking:

2 个赞

当然可以,但我仍然希望它能像现在为全名指定的那样显示在用户名旁边。

目前,从用户个人资料更新部分隐藏全名部分将是一个可以接受的临时解决方案。我仍然可以处理那些过于好奇的用户带来的例外情况。

我仍然不明白为什么在基本产品中拥有这个锁定选项会如此困难,就像我们对用户名所做的那样……这似乎非常教条化。

[调侃模式开启]
有点像为了我们好而不允许用户签名。
[调侃模式关闭]

我看过了;可以通过 API 隐藏字段,但我找不到任何可以依赖的数据来知道该用户是否已获批准(在偏好设置页面上下文中):思考:

这是我目前所拥有的。
我不确定我是否应该感到难过;也许有点取巧。:微笑:

js

<script type="text/discourse-plugin" version="0.8">

const { setting } = require("discourse/lib/computed");

api.modifyClass("controller:preferences/account", {
  pluginId: "hide-name-in-preferences",

  get canEditName() {
    const enables_name = setting("enable_names");

    if (enables_name && this.isCurrentUser && !this.model.staff) {
      if (this.model.name) {
        // 仅隐藏输入字段(姓名已显示)
        this.model.can_edit_name = false;
      } else {
        // 隐藏整个部分
        return false;
      }
    }

    return enables_name;
  },
});
    
</script>
1 个赞

这既不是问题也不是教条,我们的大部分功能都是根据需求进行优先排序的,而对此的需求并不多。

9 个赞

感谢 @Arkshine,这看起来正是我需要的。我只需要研究一下如何将其包含到我的环境中 :slight_smile:,但我很可能在本周末之前就能完成。

谢谢,我理解优先排序,尽管全局机制已经存在,而且据我所知,用户已经多次请求过。如果这个补丁真的像 Arshkine 刚刚提供的那么简单,在我看来,这是一个有意识的选择,就是不给这个字段与其他字段相同的“礼遇”。

别误会我的意思,这是这里开发的一款出色的软件。据我从我协助管理的论坛上了解,它似乎运行完美无缺,我知道这有多难。我只是不同意所有做出的决定,我认为给出的一些理由有时是教条主义或专制的。但这并不妨碍它成为当今最好的软件。

祝好

主题组件可以通过使用安全模式或以其他方式修改浏览器中的内容来绕过。

大多数情况下,开发是由托管在 CDCK/Discourse.org 上的人员驱动的,因为资金来自那里。有时会添加一些功能,如果很多人想要/需要某个功能,但如果这些人没有向 CDCK 付钱,那么就需要很多人,或者是一个看起来很多付费客户会乐于拥有的功能。请注意,我不在他们那里工作,所以这仅仅是我过去(将近8年)的观察。

5 个赞

确实如此!您可能需要禁用**启用安全模式**设置,这样非管理员就无法使用它。

3 个赞

哦!我错过了。仍然可以通过巧妙使用浏览器开发者控制台来绕过。

1 个赞

谢谢,我没看到这个参数,现在已经禁用了!

1 个赞

推测:我不会惊讶于那些想要这个功能并且是付费客户的人中,大多数 可能已经拥有某种形式的 SSO 了。所以,对于其他人来说,它就成了一个更加小众的功能。

3 个赞

听起来您没有对用户注册时提供的全名进行任何身份验证。那么,如果他们将名字从 Bob Jones 改为 Sam Smith,您如何知道哪个名字是他们的呢?

2 个赞