2016-02-28 90 views
2

我有一個有很多動作的控制器。所有的應該是某些用戶只能訪問,除了一個動作:在AuthorizeAttribute上做個例外

[Authorize(Roles = "Admin")] 
public class SecretsController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     return View(...); 
    } 

    ... 
} 

即使[Authorize (Roles = null)]不起作用。方法屬性將被忽略!我怎麼能只有一個動作得到例外?像AllowAnonymous允許它,但登錄用戶可見?

+0

「您不希望所有*認證*用戶都可以訪問的」一個動作「,無論他們的角色如何?還是允許匿名訪問? – haim770

+0

只有登陸後的用戶才能看到。 – Marcel

回答

3

您可以使用OverrideAuthorization屬性就像我在下面的代碼做:

[Authorize(Roles = "Admin")] 
public class SecretsController : Controller 
{ 

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

    ... 
} 

隨着[OverrideAuthorization]裏面傳來與ASP.Net MVC5你告訴你的Index行動覆蓋/忽略在控制器級定義的授權規則。

通過這樣做,在SecretsController定義自己的行爲只是爲了管理員除了Index作用,這將是可見的只有認證的用戶,即使他們不在聯繫角色角色是可見的。

+0

太棒了!我從來不知道「OverrideAuthorization」存在!奇蹟般有效。 – Marcel

2

使用屬性使用AllowAnonymous

[Authorize(Roles = "Admin")] 
public class SecretsController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult Index() 
    { 
     return View(...); 
    } 

    ... 
}