Rails 3:向用户添加角色
-
30-09-2019 - |
题
我正在使用Cancan作为我的授权引擎。
我已经在用户中担任角色:
ROLES = %w[admin normal author corp]
我也有添加和检查角色的方法:
#cancan
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
ROLES.reject do |r|
((roles_mask || 0) & 2**ROLES.index(r)).zero?
end
end
def is?(role)
roles.include?(role.to_s)
end
我有 # roles_mask :integer
在用户模型中。
但是,我想拥有一个 after_save :add_normal_role
将正常角色分配给用户。
基本上,我无法(不知道)如何为每个用户分配角色。
这就是我所拥有的,不起作用:
private
def add_normal_role
self.roles=(ROLES[1])
end
谢谢
解决方案
您应该尝试使用forter_create回调,以确保用户具有正常角色。
当前回调的问题是因为它是after_save,默认情况下您的修改不会保存。 (保存AFTER_SAVE回调是一个坏主意,导致无限循环...)您还可以使用thefor_save回调(使用相同的代码与您已经拥有的相同代码),这也可以正常工作。
但是,由于您实际上只需要在创建对象时添加正常角色(而不是在每次更新中),因此the_create更适合。
不隶属于 StackOverflow