Rails 3:向用户添加角色

时间:2011-01-07 14:54:45

标签: ruby-on-rails ruby-on-rails-3 cancan

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

由于

1 个答案:

答案 0 :(得分:2)

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

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

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