我有一个像这样的活动管理资源:
ActiveAdmin.register Snippet do
menu label: "Text Snippets"
config.clear_sidebar_sections!
index download_links: false do
column :key if current_admin_user.developer?
column :description
column :contents
default_actions
end
form do |f|
f.inputs do
f.input :description
f.input :contents
end
f.buttons
end
end
请注意,在index
块中,如果当前管理员用户是开发人员,我只会添加key
列。我想对可用的操作应用这种过滤。
我尝试在资源定义的顶部添加了这个:
actions current_admin_user.developer ? :all : :index, :edit
但我在NameError
上获得current_admin_user
。出于某种原因,在配置块之外,活动的admin current_admin_user
帮助程序不存在。
那么,我怎样才能根据当前用户的权限进行过滤操作?
答案 0 :(得分:6)
你必须使用proc ... current_admin_user仅在它正在运行的应用程序时起作用,而不是在你声明你的类时...
例如..
action_item :only => [:edit], :if => proc { current_admin_user.developer? } do
#enter code here
end
您也可以将CanCan用于此..并在开头放置controller.authorize_resource
。请查看activeadmin文档。
另一种方法是覆盖ActiveAdmin控制器中的action_methods ..就像这样
actions :all
controller do
def action_methods
if current_admin_user.developer?
super
else
super - ['show', 'destroy', 'new', 'create']
end
end
end
如果你有多个角色,这很有用。
顺便说一句,你应该使用developer?
而不是developer
(如果我怀疑developer
方法返回一个布尔值,则会偏离正确的程度)
<强>更新强>
在版本0.6+中你应该坚持使用CanCan,有关更多信息,请查看activeadmin文档http://www.activeadmin.info/docs/13-authorization-adapter.html#using_the_cancan_adapter