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 :integerUser モデルにあります。

ただし、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 に答える