【问题标题】:Declarative authorization and the if_attribute not working声明性授权和 if_attribute 不起作用
【发布时间】:2011-02-28 11:11:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我最终使用 cancan 进行授权 - 我强烈推荐它

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


【解决方案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 在您的示例中是什么意思,但它为您提供了一个名为 user 的 Authorization.current_user 实例,您可以使用它在您的authorization_rules.rb 文件中。

【讨论】:

  • 好的,我尝试使用“用户”而不是“当前用户”。现在我已经完成了我几乎拥有以上所有但它仍然不起作用。 ://
  • 您是否收到错误或只是“权限被拒绝”?你的日志在说什么?
【解决方案2】:

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

更多详情in the Declarative Authorization docs

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多