В настоящее время у меня есть приложение 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), я был бы очень признателен за помощь!Спасибо!