[英]Implicit role assignment using MVC authorization
我正在使用自己的自定義Authorize屬性MyAuthorizeAttribute : AuthorizeAttribute
進行授權,效果很好。 問題在於角色分配。 在安全模型中,如果用戶具有Admin
角色,我正在使用User
和Manager
角色包含在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.