继续关于“根据电子邮件域的一部分自动将用户添加到组”的讨论:
提议
目前,群组成员资格设置“注册时电子邮件域与此列表中的某个域完全匹配的用户将被自动添加到此组”——管理员希望匹配 example.com——仅匹配二级域,例如 email@example.com。
我提议将其更改为也匹配子域,例如 email@sub.example.com。
原因/好处
-
对于我来说,手动输入两个与政府相关的域的子域是不可行的:每个域都有数百个子域,并且这些子域在不断变化,并且完整的列表并未公开。
-
正如 @sam 在 Automatic registration domain wild card - #3 by sam 中指出的那样,这将与
email_domains_whitelist保持一致:是的,内部存在不一致,我们的自动群组成员资格基于严格的域匹配,根据:
我们匹配
email_domains_whitelist的匹配器使用此匹配我认为使其保持连贯和一致是有意义的。
@techAPJ 你能调整一下群组的正则表达式……小心点,确保它经过测试,也能允许子域。
拟议解决方案
这可以通过对 discourse/discourse/blob/20de49c8722f8e50e93732702a8d06570376edcd/app/models/group.rb#L1017 中的 pattern = \"@(#{domains.gsub('.', '\\.')})$\" 进行少量修改来实现。
-
当我我在我的论坛上测试时,将此更改为
pattern = \"@.*(#{domains.gsub('.', '\\.')})$\"对我有用。 -
我想象
pattern = \"@(.+\\\\.)?(#{domains.gsub('.', '\\.')})$\"(基于email_domains_whitelist)也会起作用,但我后来才注意到它,并且尚未测试。我不明白为什么它不是(.+\\.)?,但也许\\\\是 Ruby 的一个特性。
另一种选择(如果您担心用户当前打算将子域排除在自动成员资格之外)是允许通配符,例如键入 *.domain.com 以进行自动群组成员资格。
谢谢
感谢您考虑此请求。