проверка авторизации пропуска cancan для аутентификации Devise
потому что любой может зарегистрироваться, а затем войти в систему,... и поскольку пользователь не идентифицируется для ролей до входа в систему, не имеет смысла пропустить authorization_check для Devise?
исходя из этой предпосылки, я наследую от контроллера регистрации Devise с этим registrations_controller и поместил его в каталог контроллера.
class Users::RegistrationsController < Devise::RegistrationsController
skip_authorization_check
end
изменить файл маршрутов:
devise_for :users, :controllers => { :registrations => "registrations" }
Я что-то упускаю хотя:
This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check.
Спасибо за вашу помощь.
1 ответов
простое решение
check_authorization :unless => :devise_controller?
Если вам нужно поставить check_authorization в каждом контроллере вручную в какой-то момент вы забудете и откроете дыру в безопасности в своем приложении. Лучше явно белые контроллеры списка, которые не нуждаются в auth cancan.
это ясно видно в документах CANCAN в
https://github.com/ryanb/cancan/wiki/Ensure-Authorization
редактировать
class ApplicationController < ActionController::Base
check_authorization :unless => :do_not_check_authorization?
private
def do_not_check_authorization?
respond_to?(:devise_controller?) or
condition_one? or
condition_two?
end
def condition_one?
...
end
def condition_two?
...
end
end