如何在ActiveAdmin自定义页面上检查cancan权限?

时间:2017-01-25 11:13:20

标签: ruby-on-rails ruby permissions activeadmin cancancan

我有以下Ability

can :manage, ActiveAdmin::Page, name: 'My Page'

它工作正常,但我想检查用户是否能够在不同页面中管理此ActiveAdmin::Page。所以,当我使用以下内容时:

can? :manage, ActiveAdmin::Page, name: 'My Page'

它为任何页面返回true,即使它不存在!

2 个答案:

答案 0 :(得分:8)

代码

can? :manage, ActiveAdmin::Page, name: 'My Page'

检查当前用户是否可以管理其ActiveAdmin::Page属性等于我的页面name实例。这正是您在能力文件中声明的条件,这就是它始终返回true的原因。

如果您想知道用户是否可以访问特定页面(我认为您正在尝试这样做),您应该问“我可以管理页面吗?”而不是“我可以管理名称为我的页面?”的页面。在前者中,您正在谈论特定页面,在后面您将讨论具有特定特征的页面。

为了询问CanCan当前用户是否可以访问特定页面,只需询问:

can? :manage, my_specific_page

其中my_specific_page必须是ActiveAdmin::Page的实例。

答案 1 :(得分:0)

最后,我想出了一种方法,它看起来很奇怪,因为它使用了 register_page ,但它正在运行:

can? :manage, (ActiveAdmin::register_page 'My Page')