2014-06-30 73 views
0

我有一個關於[Authorization]註釋的問題。我有一個帶有[Authorization(Roles ="admin")註釋的控制器。在控制器中,我有一個動作不需要是管理員,但仍然登錄。這是如何完成的?我曾嘗試創建一個自定義AuthorizationAttribute類,並將其放置在動作上。這不起作用,有沒有辦法來覆蓋[Authorization]註釋?asp.net MVC中的白名單控制器操作5

乾杯。

[Authorize(Roles = "admin")] 
public class UserController : Controller 
{ 
    [OwnDataAuthorize] 
    public async Task<ActionResult> Details(string id) 
     { 
      //..... 
     } 
     //... 
    } 
+0

創建一個自定義類應能正常工作。你必須設計兩個自定義類。首先將充當** AuthorizationAttribute **,其次將僅僅是一個標識符屬性(比如** IgnoreRoleAttribute **),您必須將其放置在您不希望檢查任何角色的操作上。然後在授權的情況下,您可以檢查源操作方法是否應用了IgnoreRoleAttribute,並且您可以在此處跳過角色授權:) –

+0

我在那裏工作,但由於mvc的bug,我需要在自定義類中實現另一個接口5.來源:[link](http://weblogs.asp.net/imranbaloch/new-filter-overrides-in-asp-net-mvc-5-and-asp-net-web-api-2) – kakebake

回答

1

我找到了答案,我的問題here。我是做正確,而是因爲與MVC 5中的一個錯誤,我不得不實現另一個界面,以及在我的自定義類:

public class OwnDataAuthorize : AuthorizeAttribute, IOverrideFilter { 
//.... 
/// <summary> 
     /// Only implemented because of a bug in MVC 5. 
     /// </summary> 
     public System.Type FiltersToOverride 
     { 
      get { return typeof (IAuthenticationFilter); } 
     } 
} 
+0

升級到MVC 5.1或5.1.2 – user960567

+0

是的,我聽說它被修復爲5.1。 – kakebake

0

沒有做到這一點,除了Authorize屬性移動到每一個控制器的方法/動作的簡單方式。因此,您需要刪除[Authorize(Roles = "admin")]並將其添加到除想要授權的方法之外的每種方法。

一個解決將與if語句使用[AllowAnonymous]屬性控制器動作內部檢查IsAuthenticated

[AllowAnonymous] 
public async Task<ActionResult> Details(string id) 
{ 
    if(!User.Identity.IsAuthenticated) 
     //redirect to loging 
    //other logic here 
    ... 
} 
+0

什麼我在那裏工作,但我需要在我的自定義類中實現另一個接口,因爲mvc 5的錯誤。[source](http://weblogs.asp.net/imranbaloch/new-filter-overrides-in-asp- net-mvc-5-and-asp-net-web-api-2) – kakebake

相關問題