Я использую Devise для аутентификации, и в моем приложении rails есть «модули».Я пытаюсь выяснить лучший подход к безопасности.Например, вот несколько вещей, которые я хочу выполнить:
- Я хочу, чтобы контроллер приложения требовал входа в систему, если только он не обращается к контроллеру
registrations
, в этом случае они просто отправляют регистрациюподробности. - На уровне приложения я хотел бы определить области, разрешающие доступ к определенным контроллерам, к которым имеет доступ компания пользователя.
- Кроме того, при каждом запросе я хочу убедиться, чтолюбые идентификаторы в URL (будь то GET, POST и т. д.), компания пользователя имеет доступ к этому контроллеру и идентификатор в параметре.(Таким образом, они не могут получить доступ к идентификатору отчета 9, если с их компанией не связан идентификатор отчета 9)
Мне кажется, что это может быть масштабируемым, но я никогда не делал этого раньшетак что я не совсем уверен.
Пуля 1
В ApplicationController я хотел бы сделать что-то вроде этого:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user! unless controller == "Registrations"
end
Я попытался поместить binding.pry
вконтроллер приложения, но controller_path
кажется всегда application
.Не уверен, есть ли простой способ сделать это, не обращаясь к каждому отдельному контроллеру, чего я надеюсь избежать, потому что я не хочу случайно что-то забыть, когда я добавляю новый контроллер в будущем (в основном против DRY).
Может быть, я смогу реализовать контроллер безопасности и унаследовать от него каждый контроллер?Никогда раньше этого не делал, но это может сработать, если я не могу выполнить то, что пытаюсь сделать в Контроллере приложений.
Пуля 2
Я пыталсяполучить доступ к переменной Devise current_user
из контроллера приложения, но она не существует, поэтому я не уверен, смогу ли я проверить разрешения пользователя из ApplicationController.Опять же, я хотел бы избежать необходимости размещать эту проверку в каждом контроллере, потому что по мере расширения приложения я могу в конечном итоге забыть реализовать проверки.
EDIT
ИтакПохоже, у меня есть адресованный пункт 1, но теперь я пытаюсь выяснить другой 2. Способность реализовать некоторый тип «области» или модуля разрешений на уровне приложения.Есть идеи?