3

宣言型承認で実行されている Ruby アプリがあり、役割を作成しました。

admin (アプリ管理者) org_admin (組織管理者) org_colab (組織協力者) org_visitor (組織訪問者)

ユーザーは複数の組織を持つことができ、管理者または共同作業者になることができます。

所属表を使用してそれらをリンクします

この多対多の役割を解決するための最良の戦略は何ですか?

アフィリエーション テーブルに追加の属性を追加するには? like : 所属(:user_id:integer, :organization_id:integer, :affiliation_type:integer)

また、所属タイプは、org_admin の場合は 0、org_colab の場合は 1、org_visitor の場合は 2 にすることができます。

特定の組織に役割を割り当てるためのより良い方法があるに違いないと思います...

4

2 に答える 2

1

私は実際に私のプロジェクトに似たものを実装しています。あなたが正しいと理解しているかどうかを明確にするために、ユーザーはアプリケーションコンテキスト全体で役割を持っている可能性があり、組織コンテキストで互いに依存しない特定の役割を持っている可能性があります。

実用的な解決策は、2 つの異なる役割セットを実装することです。次の構成について考えてみましょう: ユーザー モデル (アプリケーション全体の情報を持つ)、組織モデル (組織を定義し、おそらくユーザーが所有する可能性がある)、および組織間の関係を定義する共同モデルがあります。ユーザーと組織。

この場合、(アプリケーション全体の処理を行う) ユーザー モデルに役割を格納し、共同モデルに組織固有の役割を格納するのが最善です。

ryan bates cancan-gem と組み合わせて、モデルで文字列ベースのロール ストアを使用しました。これは簡単かつ高速に使用でき、定義された場所にロール ロジックを配置します。

これは、何千もの異なるロールやグループなどでは機能しない可能性があります。その場合、追加のモデルでロール ストレージを実装する必要があります (ユーザーと共同作業へのポリモーフィックな関係を使用)。

ご多幸をお祈り申し上げます - フロリアン

編集: その実装を ActiveRecord で検索可能にするには、ActiveRecord::Base で説明されているように、:roles-field に「serialize」機能を使用することをお勧めします。

于 2010-08-27T08:45:23.223 に答える