【问题标题】:Rails Pundit how the policies are worknig?Rails Pundit 的政策是如何运作的?
【发布时间】:2017-05-27 07:27:01
【问题描述】:

我在 ruby​​ on rails 中有一个 web 应用程序,其中设计作为身份验证,权威作为授权。

我有一个模型user,其整数role 属性的值为0、1、2,分别对应visitorvipadmin。我也有一个脚手架,比如Page,我只希望vipadmin 可以访问而不是visitor 用户。

在 page_policy.rb 我有

def index?
  current_user.vip? or current_user.admin?
end

在 pages_controller.rb 中有一行 authorize current_user。 尽管我已授予对vip 的访问权限,但它仅适用于admin 用户。我的代码哪里出错了?

谢谢

【问题讨论】:

  • current_user.vip? 是否返回 true?

标签: ruby-on-rails devise pundit


【解决方案1】:

我假设您已经在User 模型上正确设置了谓词方法vip?admin?,并且这些方法按预期工作?你能检查一下你当前用户调用这些方法的结果吗?

Pundit 实际上将current_user 的结果传递给您的策略初始化程序,您可以通过策略方法中的user 方法访问它。在这种情况下,我也会小心使用or 运算符(请参阅http://www.virtuouscode.com/2010/08/02/using-and-and-or-in-ruby/)。

所以我会尝试:

def index?
  user.vip? || user.admin?
end

此外,权威人士希望您将正在检查的 资源 传递给 authorize 方法,而不是用户对象。如果没有实例要传,可以传类:

authorize Page

【讨论】:

  • 非常感谢!它起作用了,这是由于 authorize Page.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多