Rails Pundit 政策是如何运作的?
Rails Pundit how the policies are worknig?
我在 rails 上的 ruby 中有一个 Web 应用程序,使用 devise 作为身份验证,pundit 作为授权。
我有一个模型 user
,其整数 role
属性的值为 0、1、2,用于 visitor
、vip
和 admin
分别。我也有一个脚手架,比如 Page
我只想 vip
和 admin
可以访问而不是 visitor
用户。
在page_policy.rb我有
def index?
current_user.vip? or current_user.admin?
end
在 pages_controller.rb 中有一行 authorize current_user
。
虽然我已经授予 vip
访问权限,但它仅供 admin
用户使用。我的代码哪里出错了?
谢谢
我假设您已经在 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
方法,而不是用户对象。如果没有要传递的实例,可以传递 class:
authorize Page
我在 rails 上的 ruby 中有一个 Web 应用程序,使用 devise 作为身份验证,pundit 作为授权。
我有一个模型 user
,其整数 role
属性的值为 0、1、2,用于 visitor
、vip
和 admin
分别。我也有一个脚手架,比如 Page
我只想 vip
和 admin
可以访问而不是 visitor
用户。
在page_policy.rb我有
def index?
current_user.vip? or current_user.admin?
end
在 pages_controller.rb 中有一行 authorize current_user
。
虽然我已经授予 vip
访问权限,但它仅供 admin
用户使用。我的代码哪里出错了?
谢谢
我假设您已经在 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
方法,而不是用户对象。如果没有要传递的实例,可以传递 class:
authorize Page