5

У меня были почти те же проблемы, что и Victor Martin (вы можете посмотреть вопросы, заданные здесь).Декларативное разрешение и if_attribute не работают

У меня есть декларативное разрешение, работающее практически на все, что не связано с использованием условных обозначений. Например.

has_permission_on :users, :to => [:edit, :update, :destroy] do 
if_attribute :user => is { current_user } 
end 

Есть ли общие ошибки с декларативной авторизацией? Я использую authlogic, и я подозреваю, что метод current_user в контроллере приложения может быть источником проблемы.

+0

Я закончил с использованием канкан для authorizaiton - я настоятельно рекомендую это – digitalWestie

ответ

4

Обратите внимание, что если вы используете «filter_access_to» в своих контроллерах, вам нужно убедиться, что у вас есть:: attribute_check => true. Без этого условные объявления «if_attribute» ничего не делают.

Подробнее об этом in the Declarative Authorization docs

1

Вы должны добавить к вашей ApplicationController, если вы еще не:

before_filter :set_current_user 
protected 
def set_current_user 
    Authorization.current_user = current_user 
end 

Тогда ваши правила будут выглядеть следующим образом:

has_permission_on :users, :to => [:edit, :update, :destroy] do 
    if_attribute :user => is { user } 
end 

Насколько я знаю declarative_authorization не вызывать любые методы на crontroller и не знает, что означает current_user в вашем примере, но он дает вам экземпляр Authorization.current_user под названием user, который вы можете использовать в своем файле authorization_rules.rb.

+0

ОК, я попытался с помощью «пользователь» вместо «CURRENT_USER». Теперь я сделал, что у меня в значительной степени все вышеперечисленное, но он все еще не работает. :/ – digitalWestie

+0

Вы получаете ошибки или просто «разрешение отказано»? Что говорит ваш журнал? –

Смежные вопросы