2011-11-08 15 views
4

内のすべてのアクションの[承認(役割=「admin」を)]を設定することができる方法:私は私のコントローラ上のすべてのアクションのためにそれを設定していますですが、私は次のようしているMVCコントローラ

[Authorize(Roles = "admin")] 

。しかし、私はコントローラのためにこれをグローバルに行うことができる何らかの方法はありますか?

答えて

5
[Authorize(Roles = "admin")] 
public class AdminController : Controller 
{ 
} 

この属性はコントローラでも機能します。

あなたも、ベースコントローラを作成し、それに属性を設定する(したがって、すべての派生コントローラ上で同じ認証を取得する)ことができます

[Authorize(Roles = "user")] 
public class BaseController : Controller 
{ 
} 

public class NewsController : BaseController 
{ 
} 

public class ForumController : BaseController 
{ 
    [HttpPost, Authorize(Roles="admin")] 
    public ActionResult Delete(int id) 
    { 
    } 
} 

更新

最初の質問:あなたは[HandleError]を置くことができますベースコントローラーですべてのコントローラーでMVCのエラー処理を取得します。私はちょうどそれを記述するblog entryを書いた。

2番目の質問:はい。最も具体的な[Authorize]属性をアクションに追加します。 (例えば、ベースコントローラの "users"とEditアクションの "admins"を承認する)。

+0

私は個人的にこの種のもののためのベースコントローラーを持つことを好みます。 +1 – BigMike

+0

ベースコントローラーには他にどのようなことがありますか?物事をもっと簡単にする機会を逃しているのかどうか疑問に思うだけです。 –

+0

別の関連する質問。コントローラークラスレベルでこれを行うとしましょう。次に、「user」と「admin」の2つのロールが同じアクションにアクセスすることを許可する場合はどうでしょうか。行動レベルで上書きすることはできますか?それをどうすればできますか? –

1

コントローラに属性をマークすると、コントローラ内のすべてのアクションメソッドが制限されます。

1

はい、あなたがする必要があるのは、その属性を宣言するクラスの先頭に配置することだけです。

[Authorize(Roles = "admin")] 
public class TheController : Controller 

これを実行すると、このコントローラのすべてのアクションの管理者ロールがチェックされます。

関連する問題