У меня следующая ситуация:
Мое приложение имеет несколько типов пользователей: Owner
, Team Member
, Collaborator
, Client
и Guest
. (тип Гостя не подходит для этого вопроса)
Это соединения между различными моделями:
Owner
принадлежит_ Account
Account
has_many Team Members
Account
has_many Projects
Projects
хабтм (или хмт) Collaborators
Project
habtm (или mht) Clients
Для аутентификации и авторизации необходимы четыре ключевые функции:
- Возможность обновить Collaborator до члена команды (это означает удаление всех habtm в проекты и добавление принадлежащих_ к учетной записи
- Иметь разные стратегии Devise для разных пользователей (владельцы могут регистрироваться, а клиенты - нет)
- Имеют разные страницы входа, которые принимают только подмножество пользователей (отдельный вход для владельца / членов команды / соавторов и клиентов)
- Возможность вызывать различные группы пользователей, используя Account.owner, Account.team_members, Project.collaborators и Project.clients
В моей голове было несколько решений, но я не уверен, что лучше всего подойдет в моей ситуации.
- Сначала я подумал об использовании Devise для авторизации и аутентификации, но решил, что лучше использовать что-то вроде CanCan для авторизации.
- Я также подумал об использовании одной таблицы для каждого типа пользователя, но это затруднило бы изменение ролей после первоначального создания
- Сейчас я перезаписываю использование STI для TeamMember <Пользователь, Клиент <Пользователь и т. Д. Но поскольку клиенты и соавторы принадлежат проектам, а владельцы и члены команды принадлежат учетной записи, я не уверен, что с STI будет легко работать и я также не нашел хороших примеров на Devise с STI. </li>
Есть идеи, как решить эту ситуацию?