ロールベースの特定のデータアクセスでのCakePHPアクセス割り当て
-
28-10-2019 - |
質問
私のプロジェクト要件は次のようなものです:
一番上には、すべてのdアクセス権を持つ管理者がいます。第1レベル
管理者の下には、部門長の作成以外のすべてのアクセス権を持つ部門長がいます
部門長の下には、割り当てられた部門ごとのデータを管理する他のメンバーがいます。
これで、すべての異なる部門長が独自の情報とメンバーを持ち、すべての部門長/メンバーは、入力/管理している独自の特定のレコードにアクセスできるようになります。
これで、CakePHPのACLコンポーネントを使用して、役割とそのアクセスレベルを分割できますが、すべての部門長は同じレベルのアクセス権を持つため、他の部門長の情報を見ることができ、他のすべてのメンバーは他のメンバーを見ることができます差分部門に関する情報。現在、同じレベルのアクセス権があります。
私のプロジェクトの複雑さは、他の人と同じレベル/役割の割り当てがありますが、割り当てられた、または作成された情報/データのみを表示する必要があるということです。
CakePHPですでに利用可能なプラグインを使用してこれらすべてを管理するために、誰かが私に最適なオプションを提案できますか。
デフォルトのACLコンポーネントをカスタマイズすることで作業できますが、予想よりも時間がかかります。
より良いアイデア/提案をいただければ幸いです!
解決
私の見方では、ACLはそれほど魔法ではありません。たとえば、ACLは、製品を追加/編集/削除するためのアクセス権を持つユーザーを通知するためのアクセス許可を管理できます。ただし、クエリを変更して、定義されたアクセス許可に従って製品をフィルタリングすることはできません(「部門Aのユーザーのみ部門Aの製品を参照してください ")..実際にはそれは嘘です。ACLはそれを管理できますが、製品を追加するたびにACOを作成し、AROS_ACOSテーブルに権限を設定する必要があるため、実用的ではない可能性がありますまた、AROSはツリー構造であるため、データのクエリを計画している場合は、簡単に悪夢になる可能性があります。
グループのみのACL 特定のページ/アクションへのアクセスを制御し、次のようなルールを作成します。
- 「部門長はページにアクセスできます 「製品リスト」および追加/削除/変更 製品」
- "管理者はアクセスできます すべてのページ」
- "他のユーザーはアクセスできます
「製品リスト」と彼らは追加することができます
製品は削除しないでください」
接続したユーザーに応じてクエリを調整するので、[製品リスト]ページのコントローラーで次のようにします。
- 接続しているユーザーが部門長に所属している場合は、
product.department_id=connected_user.department_id
がコードされているすべての製品を選択します - 接続ユーザーが管理者の場合は、すべての製品を選択してください
クエリが多すぎて、何千ものifの文を実行したくない場合は、コンポーネント、ビヘイビア、または
find()
のapp_model
メソッドを拡張しますmodel.department_id=connected_user.department_id
条件をクエリに追加することです。複数の言語で表示できる1つのWebサイトに対してこれを行いました。各言語には独自のユーザー、データ、ログなどがあり、すべての情報を表示できる管理者が1人います。これは私にとって非常にうまく機能しています= )
幸運を祈ります!
編集済み: 私が使用する動作は次のとおりです。 ジェネラコディセタグプレ
非常に簡単です。クエリを変更して、現在の言語($ _SESSION ['lang'])に一致する条件を追加します。コントローラで行う必要があるのは、LocalizableBehaviorをアタッチし、通常どおりfindメソッドを使用することだけです。 ジェネラコディセタグプレ
- 接続しているユーザーが部門長に所属している場合は、