私はイントラネットサイトのアクセス制御を実装しています。会社に200人以上の従業員とほとんどすべての人のためのカスタム権限がない場合、どちらが簡単だろうか。それは狂気です、私は知っていますが、私はそれを変更することはできません。ルールベースのアクセス制御の単純な汎用実装がありますか?
私は自分のニーズに合った汎用的な実装を見つけようとしましたが、それを見つけることができなかったので、私は自分でそれをやりました。結局、私はかなり一般的な解決策を思いつきました。誰かが前にそれをやったに違いないと思いました!
私はそれをSTOP(Subject Task Object Permission)アクセス制御と呼びました。
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
A STOPルールは以下の通りことができ
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
オブジェクトの関係属性があります:私は次のような関係持っている。このフィールドは必須ではありません、所有者、作成者、revisorなどを、サポートします一般的なタスク。そこにいると、現在のユーザーとオブジェクトインスタンスの間の関係はデリゲートによって計算されます。現在のリレーションは、次に、ルール上の必要なリレーションと比較され、アクセスを許可または拒否されます。
私が十分明確でないかどうか教えてください。
二つの疑問が生じる。このようなオープンソース実装が
ありますか?
このパスの後に発生する問題はありますか?
編集:私は先に行って、実際にこのモデルを実装するために始めた。最初の問題は、ユースケースをサポートするために、サブジェクトとオブジェクトの関係が必要だったことです。今、私は、次のルールを保存することができます:
ジョン(サブジェクト)できの彼はクリエーター(関係)がある場合には(許可)編集(タスク)ため(オブジェクト)注文。
このモデルを使用して表現できなかった実際の使用例を教えてください。
+1 "オフィススペース"タイプの雰囲気 - おそらくすべてのtpsレポートに記入してください。 – JonH
あなたのモデルデザインのために、[ロールベースのアクセス制御](http://en.wikipedia.org/wiki/Role-based_access_control)は、モデルに合った請求書のように聞こえるのですか?あなたのタイトルはこれにとても近かったので、それがあなたが本来の意味だったのかどうか疑問に思いました。 –
@Ninefingersいいえ、残念ながらそうではありません。 rOleベースのACとrUleベースのACは同じ頭字語を共有しますが、異なっていて、私は第2のものを意味しました。ルールベースのacでは、アクセスルールはセキュリティで保護されるオブジェクト(または運用システムビューから話す)に定義され、Webに適合させます。Zend_AclはZendのACL実装です私はすべてのパーミッションをロードすることを期待しています。なぜなら、それはrOleであり、rUleベースではないから、パーミッションルールがずっと少なくなることを前提としています。 – svallory