Разработать before_filter authenticate_admin? - PullRequest
11 голосов
/ 14 сентября 2011

Я добавил роль администратора в Devise, добавив атрибут администратора.

Не могли бы вы сказать мне, если это правильный способ создания before_filter, который требует подписи администратора:

в любом контроллере:

before_filter :authenticate_admin!

в application_controller

protected
  unless current_user.try(:admin?)      
    redirect_to :new_user_session_path      
  end

Ответы [ 2 ]

23 голосов
/ 14 сентября 2011

С этим подходом

  before_filter :authenticate_user!
  before_filter do 
    redirect_to new_user_session_path unless current_user && current_user.admin?
  end

Это также гарантирует, что все гости будут вынуждены войти в систему. Вам не нужно изменять метод по умолчанию для принудительной аутентификации только для доступа к методу экземпляра admin?

def admin?
  self.admin == true
end

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

1 голос
/ 25 октября 2016

Глядя на ответ выше (Михаэль Де Сильва), у меня возникла проблема с кодом, который он использовал. Он написал путь в виде символа (:new_user_session_path), но мне нужно, чтобы он был обычным помощником пути (new_user_session_path). Пока я не изменил это, я получал ошибки, говоря, что путь был неверным. (Я использую Rails 5.)

Надеюсь, это поможет другим!

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