用户模型声明性授权'if_attribute'问题

时间:2010-05-27 19:01:24

标签: ruby-on-rails authlogic declarative-authorization

我正在使用authlogic(2.1.3)和declarative_authorization(0.4.1)来控制对我的应用程序的访问。

所有授权按预期工作除了用户分配了编辑角色后,无法更改其(authlogic提供的current_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 个答案:

答案 0 :(得分: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