下面是Ability:
Ability
can :manage, ActiveAdmin::Page, name: 'My Page'
而且它工作得很好,但我想检查用户是否有能力在不同的页面中管理这个ActiveAdmin::Page。因此,当我使用以下命令时:
ActiveAdmin::Page
can? :manage, ActiveAdmin::Page, name: 'My Page'
404-页面不存在页面不存在!
j2cgzkjk1#
密码
检查当前用户是否可以管理name属性等于 My Page 的ActiveAdmin::Page示例。这正是你在能力文件中陈述的条件,这就是为什么它总是返回true。如果你想知道一个用户是否可以访问一个特定的页面(我认为你正在尝试这样做),你应该问“我可以管理这个页面吗?””而不是“我可以管理名称为 * 我的页面 * 的页面吗?在前者中,你谈论的是一个特定的页面,而在后者中,你谈论的是具有某种特征的页面。为了询问CanCan当前用户是否可以访问特定页面,只需询问:
name
true
can? :manage, my_specific_page
其中my_specific_page需要是ActiveAdmin::Page的instance。
my_specific_page
b0zn9rqh2#
最后,我想出了一个方法,它看起来很奇怪,因为它使用了 register_page,但它正在工作:
can? :manage, (ActiveAdmin::register_page 'My Page')
yvgpqqbh3#
我只想分享我为我的案例所做的事情:
# ability.rb can(:manage, ActiveAdmin::Page, name: 'Page Title')
在ActiveAdmin页面中:
action_item :specific_page, only: :show, if: proc { authorized?(:manage, controller.instance_variable_get(:@specific_page)) } do link_to 'Page Title', "/admin/..." end ... controller do def show @specific_page = ActiveAdmin.application.namespaces[:admin].resources.select { |resource| resource.resource_label == 'Page Title' }.first end end
lf5gs5x24#
在我应用register_page解决方案之后,菜单下拉列表扩展到了各个菜单链接。这个GitHub问题让我来回答。https://github.com/activeadmin/activeadmin/issues/4783#issuecomment-479562966我是这样解决的。
def find_custom_page(name) ActiveAdmin.application.namespaces[:admin].resources.find{|r| r.resource_name.name == name } end can? :manage, (find_custom_page 'MyPage')
4条答案
按热度按时间j2cgzkjk1#
密码
检查当前用户是否可以管理
name
属性等于 My Page 的ActiveAdmin::Page
示例。这正是你在能力文件中陈述的条件,这就是为什么它总是返回true
。如果你想知道一个用户是否可以访问一个特定的页面(我认为你正在尝试这样做),你应该问“我可以管理这个页面吗?””而不是“我可以管理名称为 * 我的页面 * 的页面吗?在前者中,你谈论的是一个特定的页面,而在后者中,你谈论的是具有某种特征的页面。
为了询问CanCan当前用户是否可以访问特定页面,只需询问:
其中
my_specific_page
需要是ActiveAdmin::Page
的instance。b0zn9rqh2#
最后,我想出了一个方法,它看起来很奇怪,因为它使用了 register_page,但它正在工作:
yvgpqqbh3#
我只想分享我为我的案例所做的事情:
在ActiveAdmin页面中:
lf5gs5x24#
在我应用register_page解决方案之后,菜单下拉列表扩展到了各个菜单链接。
这个GitHub问题让我来回答。https://github.com/activeadmin/activeadmin/issues/4783#issuecomment-479562966
我是这样解决的。