Rails:cancancan gem条件不起作用

时间:2017-10-07 19:39:24

标签: ruby-on-rails permissions cancancan

在我的项目中,我有一个使用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,这是正常的吗? enter image description here

另外,如果你查看github,有一个如何使用cancancan的例子:

enter image description here

如您所见,读取权限后有一个@article。所以我认为我不需要使用current_user而不是@user

最后:

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

1 个答案:

答案 0 :(得分:0)

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