3

私はまだACLプロジェクトに取り組んでおり、次の問題についていくつかのアイデアが必要です。

MySQLを使用して、ユーザー、ロール、および権限を保存しています。最初に、TABLEロールにフィールド「parent_id」を作成し、これを介して各ユーザーの権限を管理しようとしていました。新しい役割を追加すると、階層を管理し、誰がどのリソースにアクセスできるかを制御するのが非常に複雑であることに気付くまで、それは一種の作業でした。いくつか検索を行ったところ、リレーショナルデータベースを使用して階層を操作するのは非常に複雑であることがわかったため、階層の使用をあきらめました。

ユーザーの作成を管理するための最適なソリューションを見つけるためにあなたの助けをお願いします:私には4人の異なるユーザーがいます:SuperAdmin、CustomerAdmin、Technician、client。新しいユーザーを作成するページにいるとき、技術者にCustomerAdminやSuperAdminなどのタイプの新しいユーザーを作成させたくありません。

SuperAdminだけに新しいユーザーを作成させることを考えましたが、私の制約の1つは、CustomerAdminにも技術者であるユーザーを作成させる必要があるということです。

より教訓的になるように努めて、SuperAdminは私になる​​ことができます。顧客管理者は私のクライアントであり、彼には企業があります。彼の企業では、技術者とクライアントの2種類のユーザーを作成できます。

これは単なる例ですが、彼に新しい権限を与える新しい種類のロールを作成する場合は、彼よりも強力なユーザーを作成する権限を拒否する方法を見つける必要があります。

私の質問が客観的であったかどうかはわかりませんが、これについて私と話すことができる人なら誰でも歓迎します。

4

2 に答える 2

5

すでに自分の役割がありますが、各役割にはアクションを実行する権限が必要です。これはほぼ間違いなくやり過ぎですが、非常に柔軟である必要があります。

| 役割表|
 | ロールID| 役割名| アクセスレベル|
 ----------------------------------------
 | 1 | SuperAdmin | 10 |
 | 2 | ClientAdmin | 20 |
 | 3 | 技術者| 40 |
 | 4 | クライアント| 80 |

 | アクションテーブル|
 | アクションID| アクション名|
 ---------------------------
 | 1 | ユーザーの作成|
 | 2 | ユーザーの削除|
 等。

 | 権利表|
 | 正しいID| ロールID| アクションID|
 ----------------------------------
 | 1 | 1 | 1 |
 | 2 | 1 | 2 |
 | 3 | 2 | 1 |
 | 4 | 2 | 2 |
 等。

 | パラメータテーブル|
 | パラメータID| 正しいID| パラメータ名| パラメータ値|
 -------------------------------------------------- ---------
 | 1 | 1 | 最大ユーザーアクセス| 10 |
 | 2 | 2 | 最大ユーザーアクセス| 10 |
 | 3 | 3 | 最大ユーザーアクセス| 20 |
 | 4 | 4 | 最大ユーザーアクセス| 20 |
 等。

Rightsテーブルは、SuperAdminとClientAdminの両方がユーザーを作成および削除できることを示しています。パラメータテーブルは、ClientAdminが最大アクセスレベル20(1が最高)のユーザーを作成するように制限します。このアクセスレベルをロールに一致させて、Role.Access_Level> = MaxUserAccessである新しいユーザーのロールのリストを提供できます。

アクションは、権利に応じて複数のパラメーターセットを使用できますが、MaxUserAccess以外は考えられませんでした。

于 2012-06-28T16:02:15.827 に答える
1

数値がパーミッションの「レベル」を表し、特定の増分で特定のパーミッションを取得するパーミッション値型​​スキームを使用した場合はどうなりますか?

例えば

スーパー管理者10000顧客管理者1000技術者100ペオン10

読み取り可能=10書き込み可能設定=100ユーザーを作成可能1000

アクションのターゲットユーザーが、アクションを実行しているユーザーよりも高いアクセス許可番号を持っている場合は、アクションを拒否します。これは、具体化されたパスを構築したり、ツリーデータ構造を構築したりすることなく、それらの意味を抽象化するための非常に簡単な方法です。

于 2012-06-28T15:34:00.860 に答える