7

ASP.NET MVCを既存のWebFormsアプリケーションに追加しています。当分、私はこの部分が既存のコード(フォーム認証)によって処理されるため、認証/ログインについては気にしません。ASP.NET MVC3の権限ベースの承認

既存のWebFormsアプリケーションでは、ページごとに完全なカスタム権限ベースの承認があります。したがって、各ユーザーには、アクセスを許可されているページをリストした一連の権利があります。
これで、同じアクセス権システムを使って特定のMVCコントローラとアクションへのアクセスを制限する方法を決定する必要があります。

私が理解しているように、ASP.NET MVCの場合は、ロールを指定できる標準AuthorizeAttributeが標準で用意されています。私はまた、指定の権限の代わりの役割を示唆していくつかの記事を見つけた - それは、このような何かをすることが可能です:

[CustomAuthorize(Roles = "View products, Edit products")] 

AuthorizeAttributeを拡張することにより、また、私は保存し、アクセス権限を定義することができます。

このソリューションは私にとっては受け入れられます(ただし、役割のセマンティクスを変更すると少し匂いがあります)。
しかし、それをコミットする前に、他にどのようなオプションがあるのか​​を見たいと思います。そして、それは私が立ち往生したところです - 私は、ASP.NET MVCでの認証に関するさまざまなアプローチの完全な概要を見つけていません。また、フォーム認証、メンバーシッププロバイダ、認可属性、IPrincipalなどのセキュリティの概念が互いにどのように関係していて、どのように連携して動作するのかを知りたいと思います。

+0

これは、ここで試されたものに似ていますか?私が理解する限り、それは似ています:http://stackoverflow.com/questions/10338734/custom-security-scenario-in-asp-net-mvc/ – antijon

+0

@antijonカスタムAuthorizeAttributeを実装します。しかし、私は他の選択肢とその長所と短所についてより詳細に調べたいと思います。 –

答えて

7

まず理解しなければならないことは、Webformsによく似ていることです.MVCにはパイプラインがあります。それぞれの要求はいくつかの方法を経ています。途中にある拡張ポイントがあり、あなたが「繋ぐ」ことができます。

すべてのAuthorizeAttributeは、OnAuthorization拡張ポイントにフックし、ユーザーに与えた条件(ユーザー名、ロールなど)に基づいてユーザーにアクセスを許可するかどうかを決定します。

ここでは例です:http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx

あなたは、独自のカスタムの許可属性を作成し、独自の判断基準と正確に同じことを行うことができます。 Rolesパラメータを再利用する必要はありません。必要に応じて独自にすべてを作成できます。

これはMVCが好む方法です。もう1つの素晴らしい点は、フィルタを作成してグローバルフィルタに追加し、必要に応じてすべてに適用できることです。

基本的に2つの妥当な選択肢があります。 Application_AuthenticateRequest(推奨されません)でglobal.asaxにハンドラを実装するか、OnAuthorizeをオーバーライドする共通のBaseControllerを作成します(同じ場所を別の場所に置きます)。

多くの人がセッション変数を使用して認証しようとしていますが、それは単に最悪のことです。

私たちはあなたの認証と許可システムについて何も知らないので、一般的なアドバイスを提供するだけです。

+0

ありがとうございました!認証に関しては、フォーム認証とカスタムUserクラスを使用したログインのみです。パーミッションシステムに関しては、各ページごとに「モジュールキー」が定義されており、各ユーザーが各ページにアクセスするためのデータベースパーミッションが格納されています。権限の確認は、現在、 'BasePage:Page'に実装されています。それがあなたが知りたい情報なのかどうか分からないのですか? –

関連する問題