0

コントローラメソッドにアクセスするロールの認可を追加する最も簡単な方法は次のとおりです。もちろんコントローラにアクセスする権限を持つロールを管理する方法は?

[Authorize] 
public ActionResult Index() { return View(); } 

、それはそれですべてのメソッドを属性する直腸領域の痛みですので、次のように自分の正気を保持したいすべてのプログラマは、フィルタを追加します。今

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ ... filters.Add(new AuthorizeAttribute()); } 

、問題は、ユーザが許可されている場合ということですが、何の役割が主張していない、彼らはまだ、とにかくすべての方法については、以下の構文を使用するために私を強制する方法を、アクセスすることができます。それで私は悲しくなった。

[Authorize(Roles = "monkey,donkey")] 
public ActionResult Index() { return View(); } 

私が知りたいのは、このようなグローバルフィルタを追加する方法ですが、特定の役割のみを許可する方法です。私がこれまでに見つけた最良の方法は、次のように、フィルタのプロパティを指定することです(非凡なものです。コンストラクタのリストには何もありません)。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ ... filters.Add(new AuthorizeAttribute { Roles = "monkey,donkey" }); } 
  1. これは推奨される方法ですまたはより信頼性の高いアプローチがありますか?
  2. フィルタを特定のメソッド/コントローラにのみ追加する場合、どうすれば制御できますか?
  3. 特定のメソッド/コントローラへの匿名アクセスを許可するにはどうすればよいですか?

    [Authorize] 
    public class BaseController : Controller 
    { 
    } 
    

    そして、プロジェクト内の他のすべてのコントローラは、このコントローラから継承する必要があります:物事の

答えて

0

私の方法は、このようになりますBaseControllerを持つことです。私は通常、ベースコントローラーの中にいくつかのヘルパーメソッドを持っています。

[Authorize(Role = "monkey")] 
public class MonkeyController : BaseController 
{ 
} 

し、これらの権限を持つすべてのコントローラは、MonkeyControllerから継承:唯一の特定の役割は、私は特定のコントローラを行うアクセス権を持つべき分野については

匿名アクセスの場合は、コントローラまたはアクションで[AllowAnonymous]を使用してください。

+0

ファイルをベースコントローラに置きたい場所が不思議です。他のコントローラと同じフォルダに配置されているのでしょうか、それとも別の場所に置いていますか?どのように他の人がファイルを整理するかを知っておくとよい。 –

+0

はい、通常は他のコントローラと同じフォルダにベースコントローラがあります – trailmax

関連する問題