2012-02-28 7 views
4

RBACのデータベースを設計しようとしていますか?私が理解しているように、RBACは、システム内の特定のオブジェクトへのアクセスを許可/拒否する役割とアクセス許可を使用します。私は私のサイトの1つのインスタンスのみを持っており、単にロール「Main admin」を作成するときにすべてが「Secondary admin」、「User」、素晴らしく、明確であるなどRBAC(追加レベルあり)

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

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

私はYiiをRBACでビルドして使用する予定です。違いがあればそれを使用します。

どのように対処しますか?

ありがとうございます!

答えて

1

「管理者」の役割とルールは、既に使用しているように保持できます。そして、各町の 'moscow'、 'london'などの新しい役割を追加してください。あなたのコントローラでは、次の例のようなアクションメソッドで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); 
} 
0

あなたの質問を理解することで、問題を解決する方法は2つあります。

最初は、階層的な役割(役割の継承)の使用によるものです。実装と管理が複雑になりますが、これは非常に面白いレベルの柔軟性を提供します。

2番目の方法は、興味深い場合がありますが、これは学問的理由からRBACを「拡張」しようとしたときに試したことです。

私がしたことは、2つ以上の「名前付き」レベルの定義を各役割に許可することです。

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

  1. 「シニア」=レベル500
  2. 「中級」=レベルだから、プログラマーの役割を考えると、私の実装では、次のような役割にレベルを追加できます:誰かがこのような仕様書等のオブジェクトのインスタンスにアクセス許可を割り当てることになるときに、それは次のように割り当てることができる200
  3. 「ジュニア」=レベル0

"一部のドキュメント" - >プログラマ(レベル500) - >可能です。 "一部のドキュメント" - >プログラマ(レベル0) - >読み込める "一部のドキュメント" - >削除

これは、すべてのプログラマーが文書を読むことができますが、「レベル」権限がないため、ジュニアおよび中間媒体はその文書を編集できないことを示しています。シニアプログラマだけがドキュメントを削除することができます。

これにより、1つの役割だけを作成することで3つの異なるレベルの権限を持つことができます。非階層実装で

:伝統的なシステムでは、私のような3つの異なる役割(継承と4)を作成しなければならなかっただろう

  1. シニアプログラマー
  2. 中級プログラマー
  3. 階層的な実装で
  4. ジュニアプログラマー

  1. プログラマー
  2. シニアプログラマが(プログラマを拡張)
  3. 中間プログラマ(プログラマを拡張)
  4. ジュニアプログラマ(プログラマを拡張)明らか

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

0

要件に最も適しているのは、グループとグループの階層を作成することです。すべての子グループに間接的に割り当てるグループに役割を割り当てます。このようにして、共通の役割と個人の役割を個々のグループに割り当てることができます。あなたの場合、ロンドン、東京、モスクワはグループです。

私は、このソリューションをセキュリティアクセス制御ツールVisual Guardで実装しました。これは、アプリケーションセキュリティの懸案事項のほとんどを実装しています。

私は、グループを広範に使用しているマルチテナントおよびサウスアプリケーションのコントロールにアクセスするためにビジュアルガードを使用しました。

Click hereもっと読むには

関連する問題