2010-05-27 2 views
2

Я использую authlogic (2.1.3) и declarative_authorization (0.4.1) для контроля доступа к моему приложению.Пользовательская модель декларативная авторизация 'if_attribute' issue

Все полномочия разрешены кроме Пользователям, которым назначена роль редактора, не удается изменить их (параметры current_user, предоставленные authlogic) (часть модели пользователя).

Роль «Гость» работает так же, как и ожидает «Администратор».

Я использую пользователя (по имени «bob»), которому была назначена роль редактора. Проверяется в базе данных и в сеансе IRB.

Соответствующие содержание authorization_rules.rb файла:

role :guest do 

    # allow anonymous 'user' to create an account 
    has_permission_on :users, :to => [:new, :create] 

    # allow anonymous 'user' 'read-only' actions 
    has_permission_on :users, :to => [:index, :show] 

    end 

    role :editor do 

    # allow authenticated User to see other users 
    has_permission_on :users, :to => [:index, :show] 

    # allow authenticated User to update profile; doesn't work 
    has_permission_on :user, :to => [:edit, :update] do 
     if_attribute :user => is { user } 
    end 

    end 

    role :administrator do 

    # 'full control'  
    has_permission_on :users, :to => [:index, :show, :new, :create, :edit, :update, :destroy] 

    end 

Я считаю, что проблема связана с if_attribute: пользователя => {пользователь}. if_attribute, похоже, предполагает, что: пользователь должен быть атрибутом (или свойством) объекта, являющегося тестом, в данном случае моделью пользователя, а не самой вещью. Я искал метод if_self или что-то подобное, но ничего не видел.

Справка приветствуется.

ответ

3

Обнаружено решение; это связано с методом if_attribute, как я подозревал. Правильная установка роли:

role :editor do 

    # allow authenticated user to see other users 
    has_permission_on :users, :to => [:index, :show] 

    # allow authenticated user to update profile 
    has_permission_on :users, :to => [:edit,:update] do 
    if_attribute :id => is { user.id } 
    end 

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