私は3階層MVCソリューションを持っている:MVCのWeb - ビジネスレイヤ - データアクセス層AuthorizeAttributeでMVC 5 Windows認証とサービス層
私はデータベースバックエンドでのユーザーおよびグループ用のカスタムテーブルを持って、ユーザーグループはカスタム権限構造にマップされます。認証ではユーザーの存在をチェックする必要があり、許可ではユーザーがそのアクセス許可に基づいて実行できる内容を検証する必要があります。
カスタムAuthorizeAttributeを実装し、HttpContext.User.Identity.Nameがユーザーテーブルに存在する場合にサービスレベルを確認し、コントローラと操作に基づいてユーザーのアクセス許可を確認することで、認証と承認を実行できます。
ただし、サービスレベルでは、コントローラのアクションから呼び出されたときに再度ユーザーを承認する必要があります。これにより、ユーザーグループのメンバーシップに応じて、読み取り専用または非表示のフィールドなど、ユーザーが実行できる操作と実行できない操作を細かく制御できます。
問題は、コントローラーアクションのAuthorizeAttributeとコントローラーアクション自体(サービスレベル経由)の両方でユーザーを認証し、承認することになります。
これは何よりもデザイン上の問題ですが、私が問題に最も近づいているかどうかを見たいと思っていました。
@himanshuさんのお返事ありがとうございます。現時点では、サービス層は密接に結合されたdll(すなわち、インタフェースのない直接的なプロジェクト参照)である。認証はWindows認証で、ユーザー名はメソッドパラメータとしてサービスレイヤーに渡されます。将来、私はこのサービス層を抽象化したいと思うでしょう。私の問題は、私がAuthorizeAttirbuteでやっているように認可を複製してから、サービス層でもう一度複製することです。 – sjr