0

私は良い開発者になろうとしており、自分の懸念を分離しようとしています。すべての Web コードを含む ASP.NET MVC プロジェクトと、すべてのモデル コードを含む DAL プロジェクトがあります。

DAL のコードは、現在のユーザーが何らかのアクションを実行する権限を持っているかどうかを確認する必要がある場合がありますCurrentUser.IsAdmin

Web サイトの場合、current は Windows ユーザー名 (からHttpContext.Current.User.Identity) に由来しますが、これは明らかに Web の問題であり、DAL に関連付けるべきではありません。

認証を疎結合するのに最適なパターンは何ですか? DAL が MVC コードにユーザー名を要求する必要がありますか、それとも MVC が DAL に通知する必要がありますか? どちらか一方に利点または欠点はありますか?

ありがとうございました!

4

1 に答える 1

1

通常、データ レベルではなく、コントローラー レベルでセキュリティを処理します。データ レベルで処理する場合は、インジェクションを使用して、DAL に現在のユーザーまたは現在のユーザーにアクセスする手段を提供します。この場合、DAL インスタンスを作成するときに、Controller から User オブジェクトを挿入することを意味します。私は時々監査のためにこれを行います。つまり、現在のユーザーは、ユーザーのデータを変更するためのアクセスを許可する役割のメンバーである可能性があります。その場合、変更を行っている実際のユーザーを監査テーブルに挿入したいと考えています。HttpContext.Current の使用は避けます。DAL で静的オブジェクトからプロパティを取得するのではなく、代わりにコントローラーのプロパティを使用して注入する必要があります。これにより、DAL のテストがはるかに簡単になります。

コントローラーでセキュリティを処理する場合、AuthorizeAttribute またはそれから派生したカスタム属性を使用して、横断的なセキュリティ問題を実装できます。

于 2010-06-05T22:25:04.973 に答える