我在ruby on rails上有一个web应用程序,其中包括设计认证和专家作为授权。
我的模型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
用户。我在哪里错了代码?
谢谢
答案 0 :(得分:0)
我假设您已在vip?
模型上正确设置了谓词方法admin?
和User
,这些方法是否按预期工作?你能检查一下你当前用户调用这些方法的结果吗?
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
此外,pundit希望您将正在检查的资源传递给authorize
方法,而不是用户对象。如果您没有要传递的实例,则可以传递该类:
authorize Page