2

リポジトリ パターンを使用して、NHibernate を使用してデータベースにクエリを実行しています。これにより、次のようなことが非常に簡単になります。

public T GetById(int id) {...}

しかし、誰かが許可されていないものを確認するためにクエリ文字列をいじり始めた場合、それはあまり役に立ちません。

さらに複雑なことに、一部のオブジェクトは、承認を実行する必要がある親オブジェクトの深くネストされた子です。

たとえば、ブログ --> 作成者 --> 投稿 --> コメント。この不自然な例では、作成者が自分の投稿とそれらの投稿に対するコメントを編集できるようにしますが、他の作成者の投稿を表示または編集することはできません。投稿が投稿者のものであることを確認するのは簡単ですが、コメントが投稿者のものであることを確認するのは少し難しいです。より深くなる例がいくつかあります。

では、(モデルまたはリポジトリで) 承認を行うにはどうすればよいでしょうか?

4

2 に答える 2

1

Decorator パターンを実装できます - IRepositories を注入するために DP/IoC コンテナーを使用していると思いますか?

行われた呼び出しが特定のユーザー/要求の種類に対して有効であることを確認する ISecureRepository を作成し、その呼び出しを IRepository に戻します。これにより、メソッドを呼び出して、戻り値の型を確認することもできます...

次に、IoC をセットアップして、IRepository にラップされた ISecureRepository を使用します...

とてもシンプルに聞こえます...

于 2008-11-20T14:37:08.833 に答える
0

これはあなたのニーズに適した実装かもしれません: http://www.codeproject.com/KB/web-security/objectlevelsecurity.aspx、これは ACL ベースのモデルです。

于 2009-02-26T02:04:26.167 に答える