Проблема декларативной авторизации модели пользователя 'if_attribute' - PullRequest
2 голосов
/ 27 мая 2010

Я использую authlogic (2.1.3) и Declarative_authorization (0.4.1) для контроля доступа к моему приложению.

Вся авторизация работает как положено , за исключением пользователя, которому назначена роль редактора, не может изменить свои (current_user, предоставленный authlogic) настройки профиля (часть модели User).

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

Я использую пользователя (с именем '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: user => {user}. Кажется, if_attribute предполагает, что: user должен быть атрибутом (или свойством) тестируемой вещи, в данном случае моделью User, а не самой вещью. Я искал метод if_self или что-то подобное, но я ничего не видел.

Помощь приветствуется.

1 Ответ

3 голосов
/ 27 мая 2010

Нашли решение; это связано с методом 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
...