0

Mongoid (NoMySQL データベース)、DEVISE、および CANACN で遊んでいます。

マニュアル (https://github.com/ryanb/cancan/wiki/Role-Based-Authorization) を読みましたが、「roleMask」計算を使用したくありません。代わりに、ユーザーの役割を含む Array (または Hash) フィールドを使用したいと思います。

class User
  include Mongoid::Document
  field :email, :type => String, :null => false
  field :roles, :type => Array, default: -> { ['User'] if new_record?}

これは何らかの方法で可能ですか?はい、いつ、どのように?:-)

よろしくお願いします

4

1 に答える 1

3

Cancan は、ロールがどのように機能するかはあまり気にしません。アビリティ ファイルは純粋な Ruby であるため、ロジックは完全にあなた次第です。たとえば、あなたの能力にこれがあるかもしれません:

can :manage, Product

これをロール配列に特定の値が含まれているユーザーに制限したい場合は、次のことができます

if user.roles.include?('Admin')
  can :manage, Product
end

あなたの能力は単なる Ruby クラスなので、Ruby で表現できることはほとんど何でもできます。

継承を処理するには複数の方法があり、そのうちの 2 つはcancan wikiで概説されています。

1 つの方法は、役割を確認する方法を変更することです。admin?メソッドがあれば、管理者役割の存在を確認するだけでなく、そのすべてのアクセス権を継承する必要がある他の役割の存在も確認します。

もう 1 つの方法は、アビリティ ファイルを役割にちなんで名付けられたメソッドに分割することです。たとえば、編集者の役割のすべてのステートメントはeditorメソッドにあり、managerメソッドにはマネージャーの役​​割のすべてのステートメントが含まれます。たとえば、マネージャーがエディターにアクセスし、editorからメソッドを呼び出しますmanager

于 2012-05-30T08:46:35.307 に答える