2014-10-08 60 views
1

我很努力地完全理解在MVC4應用程序中實現Windows身份驗證和基於角色的授權方案的正確方法。當用戶訪問(內部網)的網站目前我有以下方法檢查用戶名反對對數據庫表是否需要角色提供者實現?

List<string> permissionList = 
PermissionBo.GetUserPermissionsList(PermissionBo.ParseUserName(User.Identity.Name)); 
    Permissions permissions = new Permissions(permissionList); 

然後,如果狀態增加了一個角色給用戶對象的下列內容:

if (permissions.IsAdmin) 
    { 
     if(!Roles.RoleExists("UtilitiesToolAdmin")) 
     { 
      Roles.CreateRole("UtilitiesToolAdmin"); 
     } 
     if(!Roles.IsUserInRole(User.Identity.Name, "UtilitiesToolAdmin")) 
     { 
      Roles.AddUsersToRole(new string[] { User.Identity.Name }, "UtilitiesToolAdmin"); 
     } 

    } 

我覺得這可能是一個不正確的方式去實現這一點,但我不知道我錯了。這足以開始使用授權屬性,如下所示:

[Authorize(Roles="UtilitiesToolAdmin")] 
public static void Foo() 
{ 
return "Bar" 
} 

如果不是我錯過了什麼?

+0

使用授權屬性是你應該做的。唯一不使用授權的時間是,如果您必須以編程方式確定訪問權限。 – 2014-10-08 20:39:22

+0

我會嘗試清除我的問題,但我知道我想使用Authorize屬性,但是我不清楚如果它是「正確的」以編程方式向用戶添加角色,就像我所做的那樣 – Pseudonym 2014-10-08 20:40:23

回答

1

如果您所做的只是簡單的角色檢查,則自定義角色提供者可能有點矯枉過正(角色提供者也提供了管理角色本身的工具)。你將最終得到的是一個完整的類

throw new NotImplementedException(); 

而是,考慮創建一個自定義用戶主體。 IPrincipal接口定義一個返回一個bool的IsInRole方法。這是您將放置您的自定義角色檢查的地方。自定義用戶主體的優點是,現在,只要在生命週期中足夠早地使用自定義用戶主體對象替換默認用戶主體對象,現在所有內置的ASP.NET角色檢查好吃的東西都應該「正常工作」。

This SO answer有我見過的使用MVC應用程序使用自定義用戶主體的最佳示例之一。