Web アプリケーションのロールベースのアクセス制御を追跡するのに最適なデータベース スキーマは何ですか?
私は Rails を使用していますが、Google によってリンクされた RBAC プラグインはメンテナンスされていないようです (SVN へのコミットは 300 件のみです。最新のものはほぼ 1 年前です)。
この概念は、ゼロから実装するのに十分単純ですが、正しく理解する価値があるほど複雑で重要です。
では、他の人はどのように RBAC モデルを設計し、実装しているのでしょうか?
Web アプリケーションのロールベースのアクセス制御を追跡するのに最適なデータベース スキーマは何ですか?
私は Rails を使用していますが、Google によってリンクされた RBAC プラグインはメンテナンスされていないようです (SVN へのコミットは 300 件のみです。最新のものはほぼ 1 年前です)。
この概念は、ゼロから実装するのに十分単純ですが、正しく理解する価値があるほど複雑で重要です。
では、他の人はどのように RBAC モデルを設計し、実装しているのでしょうか?
その分野の私のかなり基本的な知識では、RBAC の基本的なアクターは次のとおりです。
リソース<-require-> ( 1 つまたは複数)パーミッション。
ロール<- は -> ( 1 つまたは複数の)パーミッションのコレクションです。
ユーザー<- 持つことができます -> ( 1 つまたは複数の)役割。
このようなモデルのテーブルは次のようになります。
アプリケーションのユーザーがリソースに必要なアクセス許可を構成できるようにする場合は、ここにリソースを含めることもできます。しかし、私はそれを必要としませんでした。それが役立つことを願っています。
これは、 Amr Mostafa の優れた回答を説明するための簡単な図です。
私はたまたまここでRBACサブシステムに取り組んでいます...なんと偶然です。
私のモデルは、表示/更新する属性や実行するアクションなど、アクセス許可を必要とするシステム内のさまざまなエンティティの構成要素に基づいています。もちろん、システムにはさまざまな役割(ユーザーに与えることができます)があり、すべてをまとめる接着剤は、特定の役割、特定の許可が必要なエンティティ、および許可を接続するアクセスルールです。承諾する。アクセスルールは次のようになります。
rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission
等々。読者の練習問題としてERDを残しておきます;-)質問がある場合は、コメントを残してください。
ユヴァル=8-)
Restful ACL Rails プラグインを使用できます。
あなたの質問への答えは、あなたが望むほど深くなると思います。ロールをグループに入れ、グループをユーザーに関連付けることを考えた場合、十分ではありません。最終的には、特定のオブジェクト (フォーラム、ビデオなど) に対する特定の権限をユーザーに付与する必要があります。
私は Yuval の答えにより近いです。必要なのは、プロジェクト全体のオブジェクト + アクション + ユーザーを関連付けることだけです。これを提供するため。基本オブジェクト (エンティティ) は完全に理にかなっています。エンティティから継承するオブジェクトは、この方法でユーザー + アクションに簡単に関連付けることができます。
また、物事をシンプルに保ちたい場合。私の提案は次のとおりです。
さらに一歩進めるために、次のこともお勧めします(自動化されたrbacの場合)
しかし残念なことに、これは .NET でのみ利用可能です。私の知る限り、Java にはカスタム属性がないため、Java で利用できる可能性はまだありません。
いくつかのコード例を思いつきたいのですが、それを行うのが面倒です。それでも、私の rbac のやり方について質問がある場合は、ここで質問できます。必ず返信します。
役割要件は、Restful認証と非常にうまく連携して、役割ベースの認証機能を提供し、適切に維持されます。
.net アプリケーションの場合は、Visual Guard http://www.visual-guard.com/などを調べて、パーミッションとロールを最初から処理する必要がないようにする必要があります。
また、.net の場合、構成で処理されるメンバーシップとロール プロバイダー、および承認があります。http://www.odetocode.com/Articles/427.aspx
このブログ投稿がとても気に入っています: https://content.pivotal.io/blog/access-control-permissions-in-rails
編集:
Railscasts の ryanb は同じ方針に沿って考え、pivollabs の投稿と同様の基本的な手法を使用してcancan https://github.com/ryanb/cancanという gem を作成したようです。
RBAC の概要 -
役割ベースのアクセス制御システムは、組織のユーザーの役割に基づいて「一部のソースまたはアプリケーション、またはアプリケーションの一部の機能」へのアクセスを制限する方法です。
ここで、制限は複数の権限によって行うことができます。それらはアクセスを制限するために管理者によって作成され、これらの権限は集合的にユーザーに割り当てられるロールを表します。
RBAC をもう少し深く掘り下げると、基本的に 3 つの機能が含まれます。
1) 認証 - ユーザーの身元を確認します。通常、これはユーザー アカウントとパスワードまたは資格情報を介して行われます。
2) 承認 - アプリケーションでユーザーができることとできないことを定義します。元。「注文の変更」は許可されていますが、「新しい注文の作成」は許可されていません。
3) アプリケーションに対するユーザー アクションの監査。- アプリケーションに対するユーザーのアクション、および誰がどのユーザーにどのアクセス権を付与したかを追跡します。
これは、RBAC システムの非常に基本的な上面図です。
RBAC システムの基本構造には、次のコンポーネントを含めることができます: ユーザー、役割、許可または制限、リソース。
これに加えて、複雑なシナリオをサポートしたい場合は、グループと呼ばれるユーザーのコレクションを作成し、ロールをグループに割り当てることもできます。というわけで、これは RBAC 構造に関する非常に基本的な情報でした。