根据子域允许自动组成员资格

继续关于“根据电子邮件域的一部分自动将用户添加到组”的讨论:

提议

目前,群组成员资格设置“注册时电子邮件域与此列表中的某个域完全匹配的用户将被自动添加到此组”——管理员希望匹配 example.com——仅匹配二级域,例如 email@example.com

我提议将其更改为也匹配子域,例如 email@sub.example.com

原因/好处

  1. 对于我来说,手动输入两个与政府相关的域的子域是不可行的:每个域都有数百个子域,并且这些子域在不断变化,并且完整的列表并未公开。

  2. 正如 @samAutomatic registration domain wild card - #3 by sam 中指出的那样,这将与 email_domains_whitelist 保持一致:

    是的,内部存在不一致,我们的自动群组成员资格基于严格的域匹配,根据:

    discourse/app/jobs/regular/automatic_group_membership.rb at 40546af21746d469e39dfdcc9ca48987fef6cf3c · discourse/discourse · GitHub

    我们匹配 email_domains_whitelist 的匹配器使用此匹配

    discourse/lib/validators/email_validator.rb at 40546af21746d469e39dfdcc9ca48987fef6cf3c · discourse/discourse · GitHub

    我认为使其保持连贯和一致是有意义的。

    @techAPJ 你能调整一下群组的正则表达式……小心点,确保它经过测试,也能允许子域。

拟议解决方案

这可以通过对 discourse/discourse/blob/20de49c8722f8e50e93732702a8d06570376edcd/app/models/group.rb#L1017 中的 pattern = \"@(#{domains.gsub('.', '\\.')})$\" 进行少量修改来实现。

  1. 当我我在我的论坛上测试时,将此更改为 pattern = \"@.*(#{domains.gsub('.', '\\.')})$\" 对我有用。

  2. 我想象 pattern = \"@(.+\\\\.)?(#{domains.gsub('.', '\\.')})$\"(基于 email_domains_whitelist)也会起作用,但我后来才注意到它,并且尚未测试。我不明白为什么它不是 (.+\\.)?,但也许 \\\\ 是 Ruby 的一个特性。

另一种选择(如果您担心用户当前打算将子域排除在自动成员资格之外)是允许通配符,例如键入 *.domain.com 以进行自动群组成员资格。

谢谢

感谢您考虑此请求。

6 个赞

为了方便参考,也为了让这个功能请求看起来比仅仅四个点赞更受欢迎,这里是另外两次提出此功能请求的链接。第一次是在四年前,第二次是在上个月。

2 个赞