Просто примечание для тех, кто нашел это сейчас ...
Вы можете авторизовать любой контроллер без перегрузки, абстрактные классы и методы.
Пример:
/ приложение / модели / role_ability.rb
class RoleAbility
def initialize(user)
user ||= User.new
if user.role == 'Admin'
can :manage, Post # some existing resource_authorisation
can :do_this, :on_this # authorizing a non resource
end
end
end
: do_this и: on_this полностью произвольны, но должны соответствовать разрешению! параметры в контроллере вот так ...
class Controller < ApplicationController
def some_abstract_method
### Awesome method code goes here
authorize! :do_this, :on_this
end
end
Просто помните, что, скорее всего, у вас уже есть авторизация ресурсов из ApplicationController, например, вот так
class ApplicationController
authorize_resource || authorize! :admin, Object || load_and_authorize_resource etc
end
так что не забывайте пропускать skip_authorize_resource в свой не перезагруженный / абстрактный контроллер
class AbstractController < ApplicationController
skip_authorize_resource
def some_abstract_method
authorize! :do_this, :on_this
end
end
Теперь администратор может: do_this,: on_this и хорошо авторизоваться. Возможно, вы захотите назвать эту способность более семантически, просто хотите подчеркнуть произвольность.
Это все использует Cancan 1.5, раньше ничего не пробовал.
С https://github.com/ryanb/cancan/wiki/Non-RESTful-Controllers