5

ひねりを加えたデータベースを設計しようとしていますRBAC(または、ひねりを加えていると思うのは私だけですか?)。私が理解しているようにRBAC、ロールとパーミッションを使用して、システム内の特定のオブジェクトへのアクセスを許可/拒否します。Main adminサイトのインスタンスが 1 つだけあり、単純にロール ' '、' Secondary admin'、' User' などを作成すると、すべてがわかりやすくなります。

しかし、システム内にアカウントがある場合はどうなりますか? つまりLondon、「 」、「Tokyo」、および「Moscow」のアカウントを持つ 1 つのシステムがあります。これで、各アカウントに「メイン管理者」と、各アカウントに多数の「ユーザー」が割り当てられます。もちろん、モスクワの人はロンドンのアカウントにログインできないはずです。どうすればいいのですか?アカウントへの割り当てをユーザーにバインドする追加のテーブルを作成する必要がありますか? または、アカウント ID を割り当てテーブルに追加しますか? または、「moscow_main_admin」、「london_main_admin」などの複数のロールを作成する必要があるかもしれません。このような状況では、どのようなアプローチが最適ですか?

また、ロンドン アカウントの「メイン管理者」と東京アカウントの「セカンダリ管理者」であるユーザーが何人かいると思います。

RBAC に組み込まれた Yii を使用する予定です...違いがあれば。

対処方法は?

前もって感謝します!

4

4 に答える 4

0

「管理者」の役割とルールは、すでに使用しているのでそのままにしておくことができます。そして、町ごとに新しい役割「モスクワ」、「ロンドン」などを追加します。コントローラーで、次の例のようにアクションメソッドでcheckAccessを呼び出します。

public function actionEditArticle($town)
{
 if(!Yii::app()->user->checkAccess($town)
  Yii::app()->end();

 // ... more code
}

より高度な方法は、コンポーネントディレクトリのCControllerを拡張し、runAction($action)メソッドをオーバーライドすることです。

public function runAction($action)
{
    if (isset($_GET['town']) {
        if(!Yii::app()->user->checkAccess($_GET['town']) Yii::app()->end();
    }
    parent::runAction($action);
}
于 2012-03-04T08:52:38.593 に答える
0

あなたの質問について私が理解していることから、あなたの問題を解決する方法は 2 つあります。

1 つ目は、階層的な役割 (役割の継承) を使用する方法です。実装と管理はより複雑になりますが、これは非常に興味深いレベルの柔軟性を提供できます。

2 番目の方法は (興味がある場合)、学術的な理由で RBAC を「拡張」しようとしたときに私が実験したものです。

私が行ったことは、各ロールに 2 つ以上の「名前付き」レベルの定義を許可することです。したがって、プログラマーの役割が与えられた場合、私の実装では、次のようなレベルを役割に追加できます。

プログラマー、レベル定義:

  1. 「シニア」=レベル500
  2. 「中級者」=レベル200
  3. 「ジュニア」=レベル0

したがって、誰かが仕様ドキュメントなどのオブジェクトのインスタンスにアクセス許可を割り当てる場合、次の方法で割り当てることができます。

「ある文書」→プログラマー(レベル300)→編集可能「ある文書」→プログラマー(レベル0)→「ある文書」が読める→プログラマー(レベル500)→削除可能

これは、すべてのプログラマーがドキュメントを読むことができるが、ジュニアとインターミディエイトは「レベル」権限がないため、そのようなドキュメントを編集できないことを示しています。また、上級プログラマーのみがドキュメントを削除できます。

これにより、1 つのロールを作成するだけで、3 つの異なるレベルのアクセス許可を持つことができます。従来のシステムでは、次のような 3 つの異なるロール (4 つの継承) を作成する必要がありました。

非階層実装の場合:

  1. シニアプログラマー
  2. 中級プログラマー
  3. ジュニアプログラマー

階層的な実装では:

  1. プログラマー
  2. シニアプログラマー(プログラマーの延長)
  3. 中級プログラマー (拡張プログラマー)
  4. ジュニアプログラマー(プログラマーを延長)

明らかに、レベルはサブロールとして適切に定義する必要があります。レベルを「アナリスト」として定義することは有効ではありません。これらは 2 つの異なる役割であり、サブタイプではないためです。

于 2015-04-18T20:57:00.380 に答える
0

RBAC の長年の問題。アカウントなどの決定にコンテキストを追加すると、ロールが急増します。これは私が書いた記事で、この問題と、役割の制約がどのように問題を解決できるかを説明しています。

https://iamfortress.net/2018/07/07/towards-an-attribute-based-role-based-access-control-system/

于 2020-04-04T21:48:16.840 に答える