Как пригласить другого пользователя в «команду», «учетную запись» или «проект» с помощью Clearance и Pundit? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение Rails с Clearance и Pundit, и я пытаюсь создать «команды», в которых «Team Leader» может пригласить других пользователей присоединиться к их команде.Я хотел бы сделать что-то похожее на devise_invitable , но с оформлением.

Вот мой план того, как это может работать:

  1. Пользователям, которые регистрируются на сайте через форму регистрации, автоматически присваивается уникальный идентификатор группы и они становятся "Руководитель группы."Они не видят этот идентификатор в форме.(Другой способ сделать это - создать уникальное имя команды, которое сохраняется при регистрации.) Является ли лучший способ сделать это, чтобы создать before_filter для назначения идентификатора команды и руководителя группы при регистрации?

  2. Идентификаторы или имена команд будут уникальными, и каждый пользователь может принадлежать только одной команде.Ассоциация будет выглядеть следующим образом:

    Команда

    has_many :users
    

    Пользователь

    belongs_to :team
    
  3. После создания этой учетной записи «Team Leader», этот пользовательможете пригласить других пользователей присоединиться к команде, заполнив новую форму пользователя #, аналогичную форме регистрации разрешения (имя, адрес электронной почты и т. д.). Эта форма создаст пользователя и назначит его команде руководителя группы.Им может быть назначен случайный пароль для Разрешения , чтобы новый пользователь прошел проверку.

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

Это достойная стратегия или есть более широко используемый шаблон, который мне не хватает для решения этой проблемы с Clearance и Pundit ?Я никогда не делал ничего подобного с Rails, поэтому я не знаю, является ли это способом использования клейкой ленты Clearance .

1 Ответ

0 голосов
/ 27 мая 2018

Ваш план хорош.Не существует Распродажа или Pundit конкретного способа сделать это.Конечно, ваша стратегия выглядит хорошо, и вам придется реализовать ее, используя Clearance .

  1. Насколько я понимаю, вы сначала хотите создать пользователя, а затемсоздать команду для пользователя.Так что было бы лучше для пользователя after_* обратный вызов из доступных обратных вызовов .Хук before_filter выполняется перед сохранением записи в базе данных.Так, например, если у вас нет пользователя, хранящегося в базе данных, вы не можете назначить его в качестве руководителя группы «до» сохранения пользователя.

  2. Если вы хотите использовать UUID вместоID, вы можете сделать что-то вроде this или вы можете просто использовать уникальное ограничение для столбца name таблицы teams.Ассоциация, о которой вы упомянули, кажется хорошей.

  3. Здесь вы можете создать собственный контроллер, который создает пользователя.Что-то вроде app/controllers/team_members#create.Я не думаю, что это необходимо для клейкой ленты на Клиренс .Пример кода может быть:

def create
  member = User.new(team_member_params)
  if member.save
    #some code
  else
    #some code
  end
end
Не думаю, что было бы неплохо использовать электронные письма для сброса пароля.Вы можете отправить новое письмо с помощью after_create крюка.

after_create :send_invitation_to_team_member, if: :not_team_leader

...