Разработка + STI + Авторизация - PullRequest
2 голосов
/ 16 января 2012

У меня следующая ситуация:

Мое приложение имеет несколько типов пользователей: 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>

Есть идеи, как решить эту ситуацию?

...