Activeadmin自定义页面和Cancan

时间:2014-10-23 15:40:25

标签: ruby-on-rails-4 activeadmin cancan

我使用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' “。我已经玩了好几个小时并且完全被卡住了所以任何建议都会受到高度赞赏。

1 个答案:

答案 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作为授权主题 检查。