2

我使用 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

谢谢

4

1 回答 1

2

您应该尝试使用 before_create 回调确保用户具有正常角色。

您当前回调的问题是因为它是 after_save,默认情况下不会保存您的修改。(保存在 after_save 回调中是一个坏主意,会导致无限循环......)您还可以使用 before_save 回调(使用您已经拥有的相同代码),这也可以。

但是,由于您实际上只需要在创建对象时添加一个普通角色(而不是在每次更新时),所以 before_create 更适合。

于 2011-01-07T15:04:36.813 回答