Хорошо, пара вещей:
1) CanCan довольно прост в использовании и заслуживает незначительной установки.Вот пример того, как может выглядеть app / models /ability.rb, если у вас есть два метода экземпляра пользователя is_admin?и is_reviewer?
class Ability
include CanCan::Ability
def initialize(user)
if user && user.is_reviewer?
can :access, :rails_admin
can :dashboard
cannot :read, [Class1, Class2, Class3]
can :read, Class4
end
if user && user.is_admin?
can :access, :rails_admin
can :manage, :all
end
end
end
Ваша конфигурация RailsAdmin будет содержать следующее:
RailsAdmin.config do |config|
config.authorize_with :cancan
...
end
И не забудьте, что вам нужно будет добавить канкан в ваш Gemfile, чтобы установить его какЗависимость.
2) Далее, и, возможно, более ценно то, что вы не хотите бросать код перенаправления в метод аутентификации.Вместо этого вы можете добавить следующее в ApplicationController:
rescue_from Acl9::AccessDenied do |exception|
respond_to do |format|
format.json do
render :json => { :success => false, :message => "You do not have access to do this action." }
end
format.html do
flash[:error] = 'You do not have access to view this page.'
redirect_to root_url
end
end
end
или просто:
rescue_from Acl9::AccessDenied do |exception|
flash[:error] = 'You do not have access to view this page.'
redirect_to root_url
end