我使用Activeadmin和Cancan进行用户授权。它适用于所有标准页面,但在自定义页面上,我很难将值传递给Cancan的能力。 在我的自定义活动管理页面上,我有
controller do
prepend_before_filter :filter_method
def filter_method
@project = Project.find(params[:id])
authorize! :show, @project
end
end
我的能力
can :manage, ActiveAdmin::Page, :name => "Project Preview", :poster_id => user.user_id
现在我希望授权! :show,@ project 会将Project值传递给cancan,但我得到的只是“未定义的方法`poster_id' “。我已经玩了好几个小时并且完全被卡住了所以任何建议都会受到高度赞赏。
答案 0 :(得分:1)
您需要覆盖页面控制器的authorize_access!
方法;看到
ActiveAdmin::PageController
实施以供参考。
ActiveAdmin.register_page "Project Page with Authorization" do
content do
# page content
end
controller do
private
def find_project
@project = Project.find(params[:id])
end
def authorize_access!
find_project
authorize! :show, @project
end
end
end
然后,能力检查只会检查Project而不是 ActiveAdmin ::页:
can :show, Project, :poster_id => user.user_id
另请注意,默认情况下,页面视图实际上是index
控制器
动作并传递active_admin_config
作为授权主题
检查。