2017-01-25 14 views
4

Я следующее Ability:Как проверить разрешение cancan на пользовательской странице ActiveAdmin?

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

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

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

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

ответ

0

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

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

Код

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

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

Если вы хотите узнать, может ли пользователь получить или не получить доступ к определенной странице (что, как я думаю, вы пытаетесь сделать), вы должны спросить: «Могу ли я управлять этой страницей?» вместо «могу ли я управлять страницей с именем My Page?». В первом вы говорите о конкретной странице, а в дальнейшем вы говорите о страницах с определенной характеристикой.

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

can? :manage, my_specific_page 

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

+0

Но я хочу использовал его на другой странице! –

+0

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

+0

Да, согласен, но теперь вопрос в том, какой правильный синтаксис для доступа к экземпляру страницы ActiveAdmin? –