5

我遇到的问题几乎与Victor Martin相同(您可以在此处查看提出的问题)。

我已经获得了声明性授权,适用于几乎所有不涉及使用条件的事情。例如

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

声明式授权有什么常见的陷阱吗?我正在使用 authlogic,我怀疑应用程序控制器中的“current_user”方法可能是问题的根源。

4

2 回答 2

5

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

声明性授权文档中有关此的更多详细信息

于 2010-08-27T18:47:18.700 回答
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 不会调用 cronroller 上的任何方法,也不知道current_user您的示例中的含义,但它为您提供了一个可以在文件中使用的Authorization.current_user调用实例。userauthorization_rules.rb

于 2010-06-06T23:22:58.243 回答