Ruby on Rails 3.2 Волшебство аутентификации с суб-пользователями
Я использую Ruby on Rails 3.2.8 с аутентификацией Sorcery.
Каков наилучший способ создания учетных записей для пользователей?
В идеале я хотел бы пригласить участников по электронной почте и попросить их нажать на ссылку, и они выберут свое имя пользователя / пароль. Возможно ли сделать это в одной и той же таблице пользователей, чтобы все они могли войти с одной и той же страницы входа?
Чтобы поразмыслить над тем, что я пытаюсь сделать, это... Работодатель может добавлять / приглашать сотрудников для присоединения к системе, и любой ввод данных в систему будет принадлежать работодателю.
1 ответ
Лично я бы обработал это как модель наследования одной таблицы со столбцом сопоставления с одной и той же таблицей.
Поместите поле с именем boss_id
на вашей таблице пользователей. У вас будет основной User
модель, которая имеет материал аутентификации Волшебство и любую общую логику. Под ним у вас есть Employer
а также Employee
, У них есть метод, который называется boss
: для работодателя это возвращает себя или ноль (в зависимости от того, что вы считаете наиболее целесообразным), тогда как для сотрудников это фактический метод ассоциации, что-то вроде этого:
class Employee < User
belongs_to :boss, class_name: 'User'
end
Когда работодатель отправляет приглашение, направьте приглашенных на URL-адрес для приглашений, характерных для работодателя, например:
http://yoursite.com/employer/3/invitation
Когда пользователь создает свою учетную запись, вы связываете их с владельцем своего работодателя.
Когда работодатель просматривает их данные, убедитесь, что вы также извлекаете данные их дочерних сотрудников, используя таблицу users в качестве таблицы объединения:
class Employer < User
has_many :employees, class_name: 'User', foreign_key: 'boss_id'
has_many :contacts # Or whatever your application-specific stuff is
# that you want employers to see through their employees
has_many :employee_contacts, through: :employees, source: :contacts
end
Если вам нужно назначить право собственности на работодателей в базе данных, я бы использовал наблюдателя, чтобы следить за сохранениями на принадлежащих моделях, и если они были сохранены кем-то с boss
, установите дополнительный столбец для идентификатора этого босса.