簡體   English   中英

使用MVC授權的隱式角色分配

[英]Implicit role assignment using MVC authorization

我正在使用自己的自定義Authorize屬性MyAuthorizeAttribute : AuthorizeAttribute進行授權,效果很好。 問題在於角色分配。 在安全模型中,如果用戶具有Admin角色,我正在使用UserManager角色包含在admin中。 所以

[MyAuthorize(Roles = "Admin")]

允許訪問所有方法。 因此,直觀的解決方案是在每個控制器上分配“ Admin”。 但這是最干凈的解決方案嗎?

如果我有數十個角色要工作怎么辦。 代碼行如下所示

[MyAuthorize(Roles = "Admin, Role A, Role B... Role Z")]

如果我決定改用其中一個角色名稱,該怎么辦? 如果我在自定義授權方法中篩選角色,則冒着在該函數中創建巨大的switch語句的風險 ,如下所示:

switch(Controller Accessed) 
{ 
 case Index: //if user, admin, or any other role exist

 case Manage: //if admin role exists

}

使將來更容易重命名

如果希望角色名稱更改,則在使用常量或枚舉進行重構時,將獲得更好的工具支持。

public static class Roles 
{ 
   public const string UserAdmin = "User Administrator";
   public const string SuperAdmin = "Super Administrator";
   public const string RegularUser = "Regular User";
}

要么

public enum Roles 
{ 
   UserAdmin,
   SuperAdmin,
   RegularUser
}

重用常見的權限組

如果發現自己在權限中使用相同的角色,則可以通過將MyAuthorize過濾器或MVC基本控制器子類化來簡化它。 任何繼承下面的BaseAdminController的類都將應用MyAuthorize篩選器。

[MyAuthorize(Roles = Roles.UserAdmin, Roles.SuperAdmin)]
public abstract class BaseAdminController : Controller { 

}

要么

public AdminAuthorize : MyAuthorize 
{ 
   public AdminAuthorize() 
   { 
      base.Roles = new[] { Roles.UserAdmin, Roles.SuperAdmin };
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM