2009-11-24 29 views
0

授權用戶時,我有不同類型的角色需要考慮。 例如:約翰必須有職位經理和屬於辦公用品部門訂購新電腦。具有不同類型角色的ASP.NET提供程序

Roles問題是Roles.GetRolesForUser(「John」)只能返回一個字符串數組。

我應該使用自定義角色提供者和自定義角色管理器嗎? 或者我應該開發一個自定義的ProfileManager來添加像GetUsersWithProfileProperties()這樣的方法嗎?

歡迎任何建議!

蒂鮑特

編輯:上面的例子被簡化我可以有多達4種其是4個不同的集合的角色。

編輯:我發現了一個very similar question

+1

我看到這種方法存在Roles.GetUsersInRole(「」) – Saar 2009-11-24 11:31:37

+0

我不理解的問題 - 你給的例子是關於測試用戶是否具有一個給定的角色,但你問的方法返回一個給定角色的用戶列表 - 這兩個似乎不連接? – Murph 2009-11-24 11:33:07

+0

我編輯我的帖子,因爲它不是很清楚。問題的核心是我有不同類型的角色。也許我可以通過多重角色提供者來實現這一點,但實施看起來很複雜。 – teebot 2009-11-24 12:13:56

回答

1

爲什麼不創建一個「CompositeRoleProvider」,它具有用於訪問每個從屬角色提供者的Path-To-Level類型約定。您仍然必須創建多個角色提供者,但您的複合或頂級提供者會爲您完成所有工作。 我打算做一個類似的事情與ProfileProvider

2

從你寫的東西;我相信,你所需要的一切目前可開箱:

// Return all Users in a Role 
    string[] users; 
    users = Roles.GetUsersInRole("RoleName"); 
    // Return all Roles for a User 
    string[] roles; 
    roles = Roles.GetRolesForUser(); 
    // Search through Membership store locating users with a role 
    MembershipUserCollection mu; 
    mu = Membership.GetAllUsers(); 
    // Loop through all membership users looking for users in a role 

    foreach(MembershipUser m in mu){ 
     if(Roles.IsUserInRole(m.UserName, "Role Name")){ 
      // Do something 

      // We can even nest to x levels 
      if (Roles.IsUserInRole(m.UserName, "Another Role")){ 

       // Do something else 
      } 
     } 
    } 

請澄清,如果我誤解了你的問題。

+0

然後,我將不得不使陣列平坦(在同一級別有「經理」和「辦公用品」)。雖然這可行,但這感覺有點像黑客。 – teebot 2009-11-24 12:08:46

+0

還有什麼如果有第三種類型的角色我將不得不添加另一個迭代器。 – teebot 2009-11-24 12:11:52

+0

角色是用戶定義的,所以我不能看到他們變得強烈類型恐怕。 – 2009-11-24 12:14:30

0

我正在研究如何解決一個非常類似的問題,我得出結論,最好的事情是要實現一個自定義角色提供程序。

我使用這個(http://msdn.microsoft.com/en-us/library/317sza4k(v=vs.100).aspx)作爲基礎,我將實現像(IsManager, GetDepartment,ecc)。

數據將存儲在加入到aspnet_users表的自定義表中。

希望它可以幫助別人的未來:)

相關問題