66

[Authorize]ASP.NET MVCでの属性の実際の使用法を理解するのに苦労しています。コンセプトに従って、コントローラー メソッドを[Authorize]属性で装飾すると、認証されたユーザーのみがコントローラーにアクセスできるようになります。

コントローラーを[Authorize]属性で装飾せずに ASP.NET MVC アプリケーションを開発しました。私が観察したことは、web.config またはその他の方法を使用してアプリケーションに認証メカニズムを適切に実装する{controller}/{action}/{id}と、特定のアクション メソッドの URL にアクセスできなくなることです。

システムは常にログインを要求します。これは、私のコントローラーが保護されていることを意味します。私の質問はこれ[Authorize]です。属性を使用せずにコントローラーを保護できる場合、その本当の必要性は何ですか?

4

6 に答える 6

92

本当の力は、メンバーシップ プロバイダーとロール プロバイダーを理解して実装することで得られます。ユーザーをロールに割り当てることができ、その制限に従って、さまざまなユーザーのさまざまなアクセス ロールをコントローラー アクションまたはコントローラー自体に適用できます。

 [Authorize(Users = "Betty, Johnny")]
 public ActionResult SpecificUserOnly()
 {
     return View();
 }

またはグループに従って制限することができます

[Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
    return View();
}
于 2012-06-01T09:56:14.360 に答える
8

属性を使用Authorizeすると、より便利に見え、より「MVC 方式」に感じられます。技術的な利点に関しては、いくつかあります。

私の頭に浮かぶ 1 つのシナリオは、アプリで出力キャッシュを使用している場合です。Authorize 属性はそれをうまく処理します。

もう一つは拡張性です。このAuthorize属性は、すぐに使用できる基本的なフィルターですが、そのメソッドをオーバーライドして、ロギングなどの事前承認アクションを実行できます。構成を通じてそれを行う方法がわかりません。

于 2012-06-01T14:49:57.597 に答える
5

利点の 1 つは、アプリケーションへのアクセスをコンパイルしているため、誰かが Web.config を変更してもアクセスが誤って変更されることがないことです。

これはあなたにとって利点ではないかもしれませんし、欠点かもしれません。ただし、アクセスの種類によっては、それが望ましい場合があります。

さらに、Web.config 内の認証情報が Web.config を汚染し、物事を見つけるのを難しくしていることがわかりました。したがって、ある意味ではそれが優先されますが、他の方法ではそれを行う方法はありません。

于 2012-06-01T20:36:10.573 に答える