Подтвердить что ты не робот

Cancan skip_authorization_check для проверки подлинности

Поскольку каждый может зарегистрироваться, а затем войти в систему... и потому, что пользователь не идентифицируется для ролей до тех пор, пока не войдет в систему, не имеет смысла пропустить 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.

Спасибо за вашу помощь.

4b9b3361

Ответ 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