声明性授权和if_attribute不起作用

时间:2010-06-06 20:04:21

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

我遇到了与Victor Martin几乎相同的问题(你可以看到这里提出的问题)。

我已经获得声明性授权,可用于几乎所有不涉及使用条件的内容。 E.g。

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

声明授权是否有任何常见的陷阱?我正在使用authlogic,我怀疑应用程序控制器中的'current_user'方法可能是问题的根源。

2 个答案:

答案 0 :(得分:4)

请注意,如果您在控制器中使用“filter_access_to”,则需要确保“:attribute_check => true”。没有它,条件“if_attribute”声明不会做任何事情。

有关此in the Declarative Authorization docs

的更多详细信息

答案 1 :(得分: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的含义,但是它给你一个名为{{1}的Authorization.current_user实例您可以在user文件中使用。