Rails Devise - много пользовательских моделей, один логин - PullRequest
2 голосов
/ 04 августа 2011

Я бы хотел добавить несколько разных типов пользователей в мое приложение rails. У меня есть 2 разных способа, я думаю, я мог бы пойти по этому поводу:

Я мог бы использовать метод согласно документации Devise

# Inside the various models 
devise :database_authenticatable, :trackable, :timeoutable, :lockable

# Inside your routes
devise_for :model1
devise_for :model2
devise_for :model3

# Inside your protected controller
before_filter :authenticate_model1!

# Inside your controllers and views
model1_signed_in?
current_model1
model1_session

Меня беспокоит этот метод, я хотел бы, чтобы все типы пользователей входили в систему через одну и ту же форму, и в большинстве случаев все модели имеют большинство одинаковых привилегий, поэтому я не хочу проверять для каждого один для model_signed_in? и т.д. Я не думаю, что я действительно хочу иметь дело с ИППП.

Способ 2. Выберите модель «Один пользователь» и добавьте столбец «Роль». Затем просто создайте другие модели и сделайте так, чтобы они принадлежали пользователю. Это похоже на путь, но я застрял на том, как обрабатывать ассоциации в модели пользователя.

Я просто делаю has_one для каждой из других моделей? Это кажется глупым, учитывая, что он может иметь только 1 из других. Я чувствую, что здесь упускаю что-то простое ...

Какой путь?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

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

Лучший способ выполнить ваши требования - добавить столбец role_id в модель User и создать модель Role, в которой в соответствии с вашим требованием есть несколько полей, в которых хранится информация о доступе для разных вещей.

1 голос
/ 04 августа 2011

Я не вижу причин для создания большего количества моделей, достаточно только модели User со столбцом роли (согласно вашему методу 2).

Вам даже не нужно создавать другие модели, просто есть методы для модели User, которые вам нужны, например:

def admin?
  role == "admin"
end

Это не лучший пример, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...