2017-05-27 109 views
0

我有一个在设计作为认证和权威作为授权的轨道上的红宝石的Web应用程序。Rails Pundit政策是如何工作的?

我有一个模型user一个整数role属性与值0,1,2,对于visitorvip,和分别admin。我也有一个脚手架,比如Page,我只需要vipadmin就可以访问而不是visitor的用户。

在page_policy.rb我

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

和pages_controller.rb我有一个线authorize current_user。 虽然我已授予vip的访问权限,但它仅适用于admin用户。代码在哪里出错?

谢谢

+0

是''current_user.vip返回true? –

回答

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 

此外,权威人士希望你通过资源要检查到authorize方法,而不是用户对象。如果你没有一个实例来传递,可以通过类:

authorize Page

+0

非常感谢!它的工作,这是由于authorize Page。 –