在cancan中设置用户角色

时间:2013-03-08 03:23:37

标签: ruby-on-rails cancan

我是Rails的新手,我很难找到如何创建用户角色,然后让它与Cancan一起工​​作。我正在关注这个和cancan wiki上的rails。我不明白要做的是定义每个用户角色,例如管理员,注册会员和访客可以访问的角色。我不确定我的编码方式是否正确。我还遇到了“未定义的局部变量或方法`roles_mask'”错误。

我不相信我在下面的文件中设置了正确的角色。我从头开始创建用户身份验证,如果有帮助的话。到目前为止我的部分是画廊和用户档案。 ATM如果我创建一个新帐户并选择下拉框选项“admin”,我没有任何管理员权限。我仍然无法访问页面。

ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user

    if @user && @user.role?(:admin)
      can :manage, :all
    else
      can :read, :all 
    end

    if user.role? :user
      can :manage, Profile
    end

    if user.role? :admin
      can :manage, Profile
    end
  end
end

user.rb

  ROLES = %w[admin user guest banned]

  def roles=(roles)
    self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
  end

  def roles
    ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
  end

  def role?(role)
    roles.include? role.to_s
  end

1 个答案:

答案 0 :(得分:0)

ability.rb文件中,

if @user && @user.role?(:admin)

应该是

if user && user.role?(:admin)