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

Другие вопросы по тегам