0

私は3階層MVCソリューションを持っている:MVCのWeb - ビジネスレイヤ - データアクセス層AuthorizeAttributeでMVC 5 Windows認証とサービス層

私はデータベースバックエンドでのユーザーおよびグループ用のカスタムテーブルを持って、ユーザーグループはカスタム権限構造にマップされます。認証ではユーザーの存在をチェックする必要があり、許可ではユーザーがそのアクセス許可に基づいて実行できる内容を検証する必要があります。

カスタムAuthorizeAttributeを実装し、HttpContext.User.Identity.Nameがユーザーテーブルに存在する場合にサービスレベルを確認し、コントローラと操作に基づいてユーザーのアクセス許可を確認することで、認証と承認を実行できます。

ただし、サービスレベルでは、コントローラのアクションから呼び出されたときに再度ユーザーを承認する必要があります。これにより、ユーザーグループのメンバーシップに応じて、読み取り専用または非表示のフィールドなど、ユーザーが実行できる操作と実行できない操作を細かく制御できます。

問題は、コントローラーアクションのAuthorizeAttributeとコントローラーアクション自体(サービスレベル経由)の両方でユーザーを認証し、承認することになります。

これは何よりもデザイン上の問題ですが、私が問題に最も近づいているかどうかを見たいと思っていました。

答えて

0

私があなたの質問を正しく理解していれば、あなたのサービス層でユーザーのアクセス許可/役割を確認し、それに基づいていくつかのロジックを実行する必要があります。答えは実際にあなたが使用しているサービス層のタイプは何ですか?それはWeb APIかインターフェースベースのサービス契約ですか? Webアプリケーションを使用している場合は、MVCとWeb APIを使用するSPAの一般的なアーキテクチャであるWeb APIコントローラアクションを呼び出す前に、Authorizationヘッダーにトークンを挿入できます。このシナリオでは、ベアラトークンアプローチを使用しているため、Web APIとMVCを同じサーバー上にホストする必要はありません。 Cookieベースの認証を使用している場合は、別のケースです。

+0

@himanshuさんのお返事ありがとうございます。現時点では、サービス層は密接に結合されたdll(すなわち、インタフェースのない直接的なプロジェクト参照)である。認証はWindows認証で、ユーザー名はメソッドパラメータとしてサービスレイヤーに渡されます。将来、私はこのサービス層を抽象化したいと思うでしょう。私の問題は、私がAuthorizeAttirbuteでやっているように認可を複製してから、サービス層でもう一度複製することです。 – sjr

関連する問題