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 2012-02-03 13:11:46

回答

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

OK,我尝试使用“用户”而不是“CURRENT_USER”。现在我已经完成了上述所有工作,但仍然无效。 :/ – digitalWestie 2010-06-07 21:58:01

+0

你会得到错误或只是“权限被拒绝”?你的日志说什么? – 2010-06-08 07:52:33