Разрешить автоматическое добавление в группы на основе поддомена

Продолжение обсуждения из темы Автоматическое добавление пользователей в группу на основе части домена электронной почты:

Предложение

В настоящее время настройка членства в группе «Пользователи, зарегистрировавшиеся с доменом электронной почты, который точно совпадает с одним из доменов в этом списке, будут автоматически добавлены в эту группу» — где администратор хочет сопоставить example.com — работает только для доменов второго уровня, например email@example.com.

Я предлагаю изменить это так, чтобы также поддерживались поддомены, например email@sub.example.com.

Обоснование/преимущества

  1. Для меня было бы нецелесообразно вручную вводить поддомены для двух правительственных доменов в частности: у каждого из них сотни поддоменов, которые постоянно меняются, а полный список не является общедоступным.

  2. Это обеспечит согласованность с email_domains_whitelist, как отметил @sam в Automatic registration domain wild card - #3 by sam

    Да, внутренне существует несоответствие: наше автоматическое членство в группе основано на строгом совпадении домена согласно:

    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, не могли бы вы аккуратно настроить регулярное выражение для групп и убедиться, что оно протестировано, чтобы оно также допускало поддомены.

Предлагаемые решения

Это возможно с помощью незначительного изменения в pattern = "@(#{domains.gsub('.', '\.')})$" по адресу discourse/discourse/blob/20de49c8722f8e50e93732702a8d06570376edcd/app/models/group.rb#L1017

  1. Изменение на pattern = "@.*(#{domains.gsub('.', '\.')})$" сработало для меня, когда я тестировал это на своём форуме.

  2. Я предполагаю, что pattern = "@(.+\\.)?(#{domains.gsub('.', '\.')})$" (основанное на email_domains_whitelist) также должно работать, но я заметил это позже и не тестировал. Я не понимаю, почему там не (.+\.)?, но, возможно, \\ — это особенность Ruby.

Альтернативный вариант (если вы опасаетесь пользователей, которые сейчас намеренно исключают поддомены из автоматического членства) — разрешить подстановочные знаки, например, вводить *.domain.com для автоматического членства в группе.

Спасибо

Спасибо за рассмотрение этой просьбы.

6 лайков

Только для удобства, а также, возможно, чтобы показать, что этот запрос на новую функцию пользуется большей популярностью, чем всего четыре лайка, привожу два других случая, когда эта функция уже запрашивалась. Первый раз это было четыре года назад, а второй — всего в прошлом месяце.

2 лайка