Условно разрешить регистрацию новых пользователей

Здравствуйте,
Я новичок в администрировании и разработке Discourse и пока не владею Ruby (но я полностью готов учиться). Моя первая задача заключалась в настройке установки Discourse, и я справился с этим на Digital Ocean, используя официальный образ Docker. Пока всё отлично — большое спасибо тем, кто сделал это таким простым!

Моя следующая задача более сложная (для меня). Я вызвался настроить этот Discourse для некоммерческой организации, которая хочет ограничить регистрацию пользователей и участие только членами этой организации. Поэтому мне нужно каким-то образом модифицировать, подключить к процессу создания новых пользователей (или даже заменить его?), чтобы программно проверять, совпадает ли отправленный адрес электронной почты с адресом текущего члена существующей организации, и не истёк ли срок членства.

Организация использует NeonCRM, и они предоставляют API, что делает такую проверку довольно простой. Насколько я понимаю, Discourse также предоставляет API, позволяющий делать всё, что можно сделать вручную. Значит, то, что я хочу сделать, более чем теоретически возможно, верно? Вопрос в том, какой подход будет лучшим.

Например, если Discourse позволяет написать слушатель событий (или плагин?), который отслеживает регистрацию новых пользователей, выполняет эту логику проверки и может прервать регистрацию с информативным сообщением, которое я смогу отобразить («Извините, вы должны быть членом Ассоциации XYZ») — это было бы прекрасно.

Или же я могу представить, что напишу собственную страницу регистрации пользователей (на PHP, языке, который я хорошо знаю), которая будет использовать оба API. Но тогда мне нужно будет каким-то образом взломать мою установку Discourse, чтобы страница регистрации перенаправляла пользователя на мою собственную версию.

Поэтому я был бы очень рад услышать предложения относительно того, какой должна быть общая стратегия, и куда мне стоит обратиться, чтобы начать изучать, как это сделать.

Большое спасибо!

Вы можете ограничить регистрации по домену электронной почты. Если все ваши пользователи используют один и тот же домен, никто извне этой организации не сможет присоединиться. В настройках найдите параметр «разрешённые домены электронной почты».

Список доменов электронной почты, разделённый вертикальной чертой, с которыми пользователи обязаны регистрировать учётные записи. ВНИМАНИЕ: Пользователи с доменами электронной почты, не указанными в этом списке, не будут допущены!

Ах, это могло бы сработать, если бы набор возможных доменов был ограничен разумным размером, но в данном случае адреса электронной почты произвольны. Спасибо за предложение.

Это поможет?

@Jonathan5 спасибо за предложение. Я просмотрел эту тему, и честно говоря, это выглядит как кошмар. Более того, члены этой ассоциации не используют NeonCRM напрямую для входа в какие-либо системы — это делают только менеджеры ассоциации. Всё довольно запутанно.

У меня появилась ещё одна мысль. Я настроил Discourse так, что доступ туда только по приглашениям. Предположим, я оставлю всё как есть, но изменю текст на странице входа, чтобы там было написано что-то вроде: «Пожалуйста, перейдите на my.example.org/discourse-invitation, чтобы запросить приглашение». По этому адресу у меня будет скрипт, который через NeonCRM API проверяет членство потенциального пользователя, через Discourse API создаёт учётную запись (если проверка прошла успешно) и отправляет ему приглашение. Мне кажется, моя логика здесь верна. Я прав?