2017-10-07 61 views
0

在我的项目中,我有一个使用Devise身份验证的用户类。每个用户都有一个与之相关的角色。例如,经理是#1角色。Rails:cancancan宝石状态不起作用

角色是一个类,角色和用户之间有一个基于role_id的关联。因此,经理的角色ID为1.

我安装了cancancan gem来管理每个用户的权限。只有经理可以创建用户帐户。所以,我写这个的能力类:

def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.role_id == 1 
     can :manage, :user 
    else 
     cannot :manage, :user 
    end 
end 

在我的用户控制,我有这样的:

def new 
    @user = User.new 
    authorize! :manage, @user 
end 

问题是,当我登录我的经理,并尝试获取新的用户页面,我收到来自cancancan的消息,说我没有访问该页面的权限。

我不知道这是否是我的条件,或当我试图访问您的帮助user.role_id或...

感谢。

见cancancan宝石:https://github.com/CanCanCommunity/cancancan

编辑:

如果我的IDE说,它无法找到CURRENT_USER这是正常的吗? enter image description here

另外,如果你在github上检查,有如何使用cancancan一个例子:

enter image description here

正如你看到的,有读取权限后@article。所以,我不认为我需要把CURRENT_USER代替@user

最后的:

问题是:user,这是不正确的。当它是一个模型时,首先需要为模型的名称写一个大写字母,而不使用“:”。因此,而不是:user,它应该是User

+0

问题是:用户不正确。当它是一个模型时,首先需要为模型的名称写一个大写字母,而不使用“:”。所以,而不是:用户,它应该是用户 –

回答

0

current_user依赖于Rails会话。由于这是您的用户控制器上的#new操作,因此您没有活动会话,因此没有current_user。