イントラネット サイトのアクセス制御を実装しています。会社に 200 人以上の従業員がいて、ほぼすべての従業員に独自の権限がなければ、これは簡単なことです。それは狂気です、私は知っていますが、私はそれを変えることはできません.
それで、自分のニーズに合った一般的な実装を見つけようとしましたが、見つからなかったので、自分でやろうとしました。結局、私は考えさせられるかなり一般的な解決策を思いつきました: 誰かが以前にそれをやったに違いない!
私はこれを STOP (Subject Task Object Permission) Access Control と呼びました。私は次の関係を持っています:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
STOP ルールには次の属性があります
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
オブジェクト関係は、所有者、作成者、改訂者などです。一般的なタスクをサポートするため、このフィールドは必須ではありません。そこにある場合、現在のユーザーとオブジェクト インスタンスの間の関係はデリゲートによって計算されます。次に、現在の関係がルールの必要な関係と比較され、アクセスが許可または拒否されます。
私が十分に明確でない場合はお知らせください。
2 つの疑問が生じます。
このようなオープンソースの実装はありますか?
このパスをたどって遭遇する問題はありますか?
編集:私は先に進み、実際にこのモデルの実装を開始しました。最初の問題は、あらゆるユースケースをサポートするために、サブジェクトとオブジェクトの関係が必要だったことです。これで、次のルールを保存できます。
ジョン(サブジェクト)は、注文 (オブジェクト) の作成者(関係) である場合、注文(オブジェクト)を(許可)編集(タスク)できます。
このモデルでは表現できなかった現実的なユースケースを教えてください。