2011-08-10 115 views
8

使用Authorize屬性我可以指定允許訪問資源的角色。ASP.NET授權屬性和管理員用戶角色

[Authorize(Roles="User")] 

但如果我有被允許去任何資源,我需要指定該之一,也是

[Authorize(Roles="User, Administrator")] 

管理員用戶,但可能有一些辦法可以在某種程度上說,管理員允許去任何地方,而不是在授權屬性中指定這一個?

所以,我的意思是,如果某處(在控制器或行動)代碼將是這[Authorize(Roles="User")]這意味着管理員角色允許去那裏。

或者我可能會將它設置爲全部動態授權角色應用程序啓動時的方式?

任何想法?

更新:

目前,我有一個管理控制器授權屬性[Authorize(Role="Administrator")]和我在屬性[Authorize(Role="User")]一些其他控制器的一些動作,所以我需要添加"Administrator"有作爲,如果我沒有找到更好的解決辦法。

+0

是我的解決方案的任何幫助? – LeftyX

回答

2

我認爲這會對你有用。使用AuthorizeAttribute創建您自己的基礎控制器,然後讓其他控制器繼承您的基類。

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

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

雖然在我看來這是可怕的。

你有多少個控制器/動作?如果您稍後忘記了這一點,或者您有一個您不希望管理員訪問的頁面,該怎麼辦?

調試代碼會變得更困難嗎?

+0

我認爲這是一個很好的觀點,如果我不希望管理員訪問的地方。問題已更新 – Joper

1

您可以創建自定義過濾器並使用它來裝飾您的動作或控制器。 這是一種結構簡單,我用了很多:

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

你可以閱讀一些here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

如果您解釋了您發佈的代碼,它會更好。 – 2012-10-28 00:37:29

0

這是我做的:確保用戶誰在「管理」角色也在「用戶」角色中。

0

您需要的概念靜態角色運行時角色。下面是一個簡單的例子:

你的角色列表及其級別:

  • 角色:管理員|級別:1
  • 作用:編輯|級別:2
  • 作用:查看器|等級:3

用戶和他們的靜態角色(靜態角色是你分配給用戶的角色):

  • 用戶:約翰|角色:Admin
  • 用戶:Sam |作用:編輯
  • User:Peter |角色:查看器

在運行時,通過使用靜態角色和角色級別生成運行時角色,具有更高級別角色的用戶自動獲取較低級別的角色。因此,在計算之後,這些用戶的運行時角色將爲:

  • User:John |角色:Admin,Editor,Viewer
  • User:Sam |角色:編輯器,查看器
  • User:Peter |角色:查看器

然後,您可以簡單地使用[Authorize(Roles =「Viewer」)],具有更高級別權限的用戶(例如John,Sam)也可以訪問它。因爲它們在運行時還必須具有查看器角色。

使用靜態角色和運行時角色的關鍵是靜態角色使角色分配更容易。而運行時角色使資源授權更加容易。

相關問題