在我的项目中,我有一个使用Devise身份验证的用户类。每个用户都有一个与之关联的角色。例如,经理是角色#1。
角色是一个类,角色和用户之间存在基于role_id的关联。因此,经理的role_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 gem:https://github.com/CanCanCommunity/cancancan
如果我的IDE说它无法找到current_user,这是正常的吗?
另外,如果你查看github,有一个如何使用cancancan的例子:
如您所见,读取权限后有一个@article。所以我认为我不需要使用current_user而不是@user
问题是:user
不正确。当它是模型时,您需要首先为没有“:”的模型名称写一个大写字母。因此,而不是:user
,而应该是User
答案 0 :(得分:0)
current_user
依赖于Rails会话。由于这是您的用户控制器上的#new操作,因此您没有活动会话,因此没有current_user。