我无法做到这一点。
我有一个使用activeadmin 0.4.4并设计工作的项目,我需要包含基于角色的权限,所以我想到了CanCan。角色可以是“管理员”。或者'发布商',管理员只能管理所有发布商和发布商。
我关注https://github.com/gregbell/active_admin/wiki/How-to-work-with-cancan-with-activeadmin,AdminUser crud工作正常,config.authentication_method =:authenticate_admin_user! alredy uncomment。
在我的ApplicationController中,我添加了以下内容:
# https://github.com/ryanb/cancan/wiki/exception-handling
rescue_from CanCan::AccessDenied do |exception|
respond_to do |format|
format.html do
redirect_to admin_root_path, :alert => exception.message
end
end
end
# https://github.com/ryanb/cancan/wiki/changing-defaults
def current_ability
@current_ability ||= Ability.new(current_admin_user)
end
这是我的能力课程:
class Ability
include CanCan::Ability
def initialize(user)
user ||= AdminUser.new
if user.role?('administrator')
can :manage, :all
else
can :read, :all
end
end
end
Ability initialize方法未执行。我试过中止, - 评论建议 - 或者p,甚至sintax错误,我什么都没有。我在做什么?
我被困在这里,我也试过了http://www.activeadmin.info/docs/13-authorization-adapter.html#using_the_cancan_adapter但它正在升级未定义的方法"授权适配器",我不确定这是否适用于我的activeadmin版本。并添加一个require active_admin / cancan_adapter会引发LoadError。
感谢。
答案 0 :(得分:0)
最后,我感谢http://makandracards.com/jan0sch/13877-rails-activeadmin-and-cancan
基本上我需要在activeadmin寄存器页面中添加一个控制器块来加载它:
ActiveAdmin.register Whatever do
#...
controller do
load_and_authorize_resource :except => :index
def scoped_collection
end_of_association_chain.accessible_by(current_ability)
end
end
#...
end