Как проверить разрешение cancan на пользовательской странице ActiveAdmin?


У меня есть следующее Ability:

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

И он работает нормально, но я хочу проверить, есть ли у пользователя возможность управлять этим ActiveAdmin::Page на разных страницах. Итак, когда я использовал следующее:

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

Он возвращает true для любой страницы, даже если она не существует!

2 4

2 ответа:

Код

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

Проверяет, может ли текущий пользователь управлять экземпляром ActiveAdmin::Page, атрибут name которого равенMy Page . Это именно то условие, которое вы указали в файле способностей, и именно поэтому он всегда возвращает true.

Если вы хотите знать, может ли пользователь получить доступ к определенной странице (что, по-моему, вы пытаетесь сделать), вы должны спросить: "могу ли я управлять этой страницей?"вместо "могу ли я управлять страницей с именем My Страница ?". В первом случае речь идет о конкретной странице, а во втором-о страницах с определенной характеристикой.

Чтобы спросить канкана, может ли текущий пользователь получить доступ к определенной странице, просто спросите:

can? :manage, my_specific_page

Где my_specific_page должен быть экземпляр ActiveAdmin::Page.

Наконец, я нашел способ, это выглядит странно, потому что он использует register_page, но он работает:

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