Webベースのイントラネットアプリケーションにセキュリティシステムを実装して、セキュリティ管理者がユーザー/ロールがオブジェクトに対してどのような種類のアクセス権を持っているかを正確に調整できるようにしたいと考えています。たとえば、ACLベースのソリューションでは、受付がCreate
、Read
およびUpdate
にアポイントメントを許可しても、Delete
を許可しない場合があります。同様に、ユーザーのボブには、会社のメモではRead
またはComment
のみを許可できますが、Create
、Update
またはDelete
は許可できません。
しかし、受付の営業時間内のみの予約を許可するにはどうすればよいですか?予約を今日から1か月の日付に制限するにはどうすればよいですか?ボブはどうですか-彼が十分な「尊敬」ポイントを獲得した後、彼にどのようにCreate
メモを付けさせますか(ここに少し似ています)。
重要なのは、これらの値を動的に維持して(営業時間、日付の制限、リスペクトポイント、いくつかの新しい制約)、アプリケーションにハードコード化しないようにするにはどうすればよいですか?プログラマーではなく、管理者にこれらのロールとその制約を作成および管理させるための方法(またはフレームワーク、読むための本など)を誰かが推奨できますか?
私が見た既存のACLおよびロールベースのシステムは、制約に対処する方法を提供していないようです-アクセス権があるか、そうでないかです!
ありがとう
使用しているテクノロジーで使用できるフレームワークはわかりませんが、一般的なソリューションとして、許可を表現および評価するために ルールベースのシステム を使用できます。
ルールは次のようになります。
IF CurrentUser.IsInRole("Receptionists") AND CurrentTime.IsOpeningHour()
THEN GrantSomePermission()
IF CurrentUser.IsManager() OR (CurrentUser.IsLead() AND CurrentUser.NotInGroup("X"))
THEN DenySomething()
管理者はそれらを作成する必要があります。これは、最小限の言語とエディター、またはクエリの作成(条件の追加、グループ化、演算子の選択など)と同様のシンプルなUIのいずれかを使用できます。
そのようなアプローチの欠点は、何かがうまくいかないときに問題を見つけることです。そのようなルールのデバッグは注意が必要です。また、ルールの実行順序も難しい場合があります。
@victorが指摘したように。ルールベースの承認システムでは、各ユーザーの任意の属性を制御することにより、ユーザーのアクションへのアクセスを微調整できます。
Ruby on Rails世界には、ルール declarative_authorization があります。これは、ルールがロールとどのように相互作用するかの例として役立ちますユーザーが実行できること、およびMVCフレームワークでルールベースの認証を使用する方法とその例を取り上げます。
動的ルールに関して:承認チェック中にデータソースを読み取ることができます(例:データベースの「設定」テーブルの営業時間)。
注意:ルールベースのシステムは、ルール(および/またはロール)を追加するときに、very非常に速く複雑になる可能性があります。したがって、完全な(自動化された)テストが実行方法です。
ユーザーオブジェクトにメソッドを追加するだけです。
public boolean makeAppointmentsWhileOpen(Date d) {
return this.makeAnyAppointment || isBusinessHour(d) < 30;
}
public boolean makeAppointmentFor(Date d) {
return this.makeAnyAppointment ||
(daysDiff(d, today) < 30);
}
public boolean createMemo() {
return this.reputationPoints >= MIN_MEMO_POINTS;
}
私が言っているのは、アクセス許可ルールをモデル化するためのフレームワークは必要ないということです。フレームワークがニーズに合っている場合、それは素晴らしいことです。そうでない場合は、必要なフィールドをuser
データベーステーブルに追加するか、上記のように他のフィールドからオンザフライでアクセス許可を計算します。
他の権限システムと同様に、テストは重要です。
"ABAC"(アクセスベースのアクセス制御)という用語でググる必要があるかもしれません
定義(ウィキペディア):属性ベースのアクセス制御(ABAC)は、アクセス制御パラダイムを定義します。これにより、組み合わせたポリシーを使用してアクセス権がユーザーに付与されます一緒に属性。ポリシーでは、任意のタイプの属性(ユーザー属性、リソース属性、オブジェクト、環境属性など)を使用できます。このモデルはブールロジックをサポートしており、ルールには、リクエスト、リソース、アクションを実行しているユーザーに関する「IF、THEN」ステートメントが含まれています。例:リクエスターがマネージャーの場合、機密データへの読み取り/書き込みアクセスを許可します。 (ウィキペディア)
典型的な使用例:整形外科医は、特定の筋疾患に関係しない限り、患者の病歴をほとんど使用しませんが、麻酔医は患者の病状にほとんど興味がありません筋肉の障害ですが、手術前に過去の手術や患者のアレルギーに関する情報が必要です。出典: http://www.axiomatics.com/industry/health-care/180-secure-information-sharing-amongst-healthcare-professionals.html
興味深い追加リソース:
注:Axiomatics AB、スウェーデンは、OASIS標準「XACML」の開発に携わっており、現在は商業コンサルタントとして活動している会社のようです。