Rails 5 Multiple Devise Models, использующих одинаковые контроллеры - архитектура - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время у меня есть приложение rails 5, в котором есть 3 модели разработки и, следовательно, 3 отдельных входа.Это работает хорошо.

Проблема, с которой я сталкиваюсь, заключается в том, что все три модели совместно используют большинство одних и тех же ресурсов, однако с разными уровнями авторизации.Например, одной модели Devise может быть разрешено создавать новые и создавать действия, но не уничтожать и т. Д. И т. Д.

В настоящее время у меня есть пространство имен контроллеров в каждой модели Devise в контроллерах.Так, например, контроллеры> администраторы> same_resource_controller.rb и контроллеры> мест> same_resource_controller.rb.Эти файлы содержат много одного и того же кода, и это создает ненужное обслуживание, которое я не считаю нужным.

Итак, если бы я использовал контроллеры> same_resource_controller.rb на верхнем уровне, я мог бы предвидеть некоторые фундаментальные проблемы:

Аутентификация , могу ли я поставить authenticate_user! в контроллере, который читает из application_controller:

def authenticate_user
  authenticate_admin! || authenticate_seat! || authenticate_client!
end

current_user , нормально ли иметь и использовать метод, подобный этому, в application_controller.rb?

def current_user
  current_admin || current_seat || current_client
end

В результате возникает потенциальная проблема с ассоциированием записей, например, при запросе current_user.another_model.yet_another_model не совпадает с и для администратора, как с Seat.

Мне очень нравится идея сокращениямои контроллеры и тесты и связанные файлы на треть, но я действительно не уверен относительно правильной архитектуры.

Если кто-то прошел через это или имеет какие-либо хорошие ссылки (я изо всех сил пытался найти статьи о работе с контроллерами, когда несколько моделей Devise), я был бы очень признателен за помощь!Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Все ли они относятся к одной и той же базовой таблице?На первый взгляд, мой вопрос: почему бы не использовать один ресурс, возможно, с атрибутом type, если вам нужно пометить клиента, место или администратора.Вы используете CanCan, Pundit или другую поддерживаемую сообществом среду авторизации?

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