我正在尝试使用CanCan gem为新users
分配默认角色。管理员可以为用户分配多个角色。为此,我添加了以下代码:
# User's role handler (More information: https://github.com/ryanb/cancan/wiki/role-based-authorization)
# This will perform the necessary bitwise operations to translate an array of roles into the integer field
ROLES = %w[admin moderator user banned].freeze
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r)}.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
end
end
# Role Inheritance
def role?(base_role)
ROLES.index(base_role.to_s) <= ROLES.index(role)
end
# Check the user's roles
def is?(role)
roles.include?(role.to_s)
end
我想定义默认用户角色(:user
),我发现了这个问题:Rails Cancan: Defining Default Role on Signup
。它说我必须简单地添加set_default_role
方法:
before_create :set_default_role
private
def set_default_role
self.role ||= Role.find_by_name('your_role')
end
但问题是我使用了另一种添加新角色的方法。我必须存储一个整数而不是字符串。此外,当您为用户分配角色时,它会将特定索引存储到users table
。我的想法是将default: 4
值添加到数据库中的roles
列,但我注意到向数据库添加新角色会更改user index number
。换句话说,如果user role
等于4,则更新后它将为8(例如)。
问题是如何将默认角色分配给用户?
非常感谢你的帮助和时间!