ユーザー数が少ない場合のアクセス制限の簡単な解決策は、Access Control Matrixです。ここで、行はユーザーであり、列はさまざまなタイプのアセットです。
私の場合、異なる属性を持つ、提供する必要のあるドキュメントがあります。したがって、私の列は異なる属性になります。したがって、これは単純な2次元行列です。
ただし、ドキュメント内の情報にも依存する要件があります。それで、私が2種類のドキュメントを持っているとしましょう。1つはX属性あり、もう1つはX属性なしです。
私の知る限り、これによりマトリックスの次元が3次元に増加します。Z軸には、「X Attr Doc」と「Without X Attr Doc」の2つのエントリがあります。
私の要件は、私が提供している情報にも依存するようなものです。
これまでに私が思いついた唯一の解決策は、2次元行列を持ち、行列の各セルに特定のルールがあることです。
ここで、ClientIDはさまざまなユーザーであり、Public、Core、Private、Defaultはさまざまなカテゴリ(属性のセット)であり、アクセスが許可されているかどうかは異なります。
1つのセルで、ドキュメントに依存する特定の条件が満たされた場合にのみアクセスが許可されます。
また、将来このテーブルを構成可能にしたいと考えています。たとえば、新しいクライアントが登録されるたびに、新しい行を1つ追加できます。または、提供する必要のある新しいカテゴリがある場合は、新しい列を使用できます。
より良い解決策はありますか?そうでない場合は、Javaで実装する最もパフォーマンスの高い方法を提案できますか? SPELのような表現言語を考えていましたが、わかりません。
免責事項:私は Axiomatics 、主要な細粒度の承認ベンダーで働いています。
こんにちはプラハルジャイン、
あなたが説明しているのは、属性ベースのアクセス制御( abac )の基礎です。 ABACでは、RBACと同様にユーザー属性(ユーザーID、ロール、グループなど)に基づいてアクセスを定義しますが、他のユーザー属性(部門、生年月日、場所など)だけでなく、リソース属性、アクション属性、および環境属性(IPアドレス、時間、デバイス)。
あなたのケースでは、あなたは資産へのアクセスを制御したいです。書類。文書にさまざまな属性があると述べています。 ABACでは、ドキュメントの所有者、ホワイトリスト、ブラックリスト、タイプ、機密性、部門などを定義できます。属性はいくつでも持つことができます。
属性(基本的には情報モデル)を定義したら、承認ポリシーの定義を開始できます。これがここの鍵です。テーブルまたはマトリックスで権限を定義する(定義、維持、最新に保つ、監査するのが難しい)のではなく、ポリシーを使用して承認資格を定義します。ポリシーは次のようになります。
ユーザーは自分の部門のドキュメントを表示できます。
これは、ベースラインのPermit
ポリシーです。ユーザーとドキュメントが同じ部門にある場合、アクセスを許可します。書き換えられた(分解された)バージョンは次のようになります。
User.department == asset.departmentの場合、ユーザーはタイプ== "document"のアセットに対してアクション== "view"を実行できます
また、ベースラインポリシーにポリシーを追加できます。たとえば、あなたはそれを述べることができます
- ユーザーが所有者ではなく、ドキュメントが非公開の場合は、アクセスを拒否します。
- User.clearance <document.classificationの場合、アクセスを拒否します。
- ユーザーがホワイトリストに含まれている場合は、アクセスを許可します。
ポリシーを組み合わせる方法を選択できます。
属性とポリシーモデルの定義に加えて、ABACはアーキテクチャも定義します。
ABACを実装する主要な標準が1つあり、それはXACML(eXtensible Access Control Markup Language)です。必要なのは Axiomatics Policy Server などのXACML実装です。
これも見てください 質問 私が返信しました。
HTH、デビッド。