2011-01-02 15 views
7

मैं कैसे "GetUsersInRoles" करना चाहता हूं, यानी मैं सभी सदस्यता यूज़र के भूमिकाओं के सेट में कम से कम एक भूमिका निभाना चाहता हूं, लेकिन मैं कर सकता हूं ऐसा लगता है कि इस के चारों ओर मेरा सिर नहीं है।asp.net C# सदस्यता: GetUsersInRoles (एकाधिक भूमिकाएं) एच

मुझे GetUsersInRole, सदस्यता.GetAllUsers(), लिंक, ... लेकिन कैसे?

किसी भी प्रतिक्रिया बहुत

सराहना की टॉमी

+0

यह संग्रहीत प्रो में लिखने के लिए लगभग 10 सेकंड लेता। –

उत्तर

10

यहाँ एक Linq संस्करण यह रिटर्न सिर्फ समान सदस्यता विधियों (FindUsersByEmail, FindUsersByName) की तरह एक MembershipUserCollection है,। यह बहुत सुंदर है, क्योंकि यह foreach पक्ष प्रभाव पर निर्भर करता है नहीं है:

public static MembershipUserCollection FindUsersByRole(string[] roles) 
    { 
     MembershipUserCollection msc = new MembershipUserCollection(); 

     roles.Select(role => Roles.GetUsersInRole(role)) 
     .Aggregate((a, b) => a.Union(b).ToArray()) 
     .Distinct() 
     .Select(user => Membership.GetUser(user)) 
     .ToList().ForEach(user => msc.Add(user)); 

     return msc; 
    } 

वैकल्पिक रूप से अगर MembershipUser की एक सूची भी करेंगे:

public static List<MembershipUser> FindUsersByRole(string[] roles) 
    { 
     var userList = roles.Select(role => Roles.GetUsersInRole(role)) 
          .Aggregate((a, b) => a.Union(b).ToArray()) 
          .Distinct() 
          .Select(user => Membership.GetUser(user)) 
          .ToList(); 
     return userList; 
    } 

और अंत में आप से एक का चयन छोड़ सकते हैं अगर आप सिर्फ उपयोगकर्ता नाम की जरूरत है :

public static List<string> FindUsersByRole(string[] roles) 
    { 
     var userList = roles.Select(role => Roles.GetUsersInRole(role)) 
          .Aggregate((a, b) => a.Union(b).ToArray()) 
          .Distinct() 
          .ToList(); 
     return userList; 
    } 
+0

का उपयोग करके आपके सभी प्रतिक्रियाओं और त्वरित उत्तरों के लिए बहुत कुछ धन्यवाद। दुर्भाग्य से मैं "उपयोगिता" जोड़ नहीं सकता क्योंकि मुझे प्रतिष्ठा के अंक की कमी है। – tommyp

1

वहाँ GetUsersInRoles के रूप में ऐसी पद्धति नहीं है, लेकिन आप अपने आवश्यक भूमिकाओं के माध्यम से GetUsersInRole और पाश का उपयोग करना होगा।

string[] roles = {"role1", "role2" }; 
     string[] tempusers = new string[]{}; 
     List<string> users = new List<string>(); 
     foreach (string role in roles) 
     { 
      string[] usersInRole = Roles.GetUsersInRole(role); 
      users = tempusers.Union(usersInRole).ToList(); 
      tempusers = users.ToArray(); 
     } 
     foreach (string user in users) { Response.Write(user + "<br/>"); } 
+0

दाएं - यही वह है जो मैं करने का एक अच्छा तरीका ढूंढ रहा हूं, अधिमानतः लिंक – tommyp

1

सच ASP.Net सदस्यता प्रदाता एक उपयोगकर्ता के बारे में सोचा एक भी भूमिका से बंधा जा रहा है के साथ बनाया जा रहा है:

बिट जटिल लेकिन यहाँ एक तरीका है। हालांकि हमने उन परियोजनाओं पर समान सेटअप किए हैं जिन पर हमने काम किया है। इसके थोड़ा अजीब लेकिन कोशिश कुछ इस तरह जो हमारे लिए काम किया:

List<string> roleset_to_find = new List<string>() {"RoleA","RoleB"}; 

List<string> membersFound = new List<string>(); 

foreach (string role in roleset_to_find) 
{ 
     membersFound.AddRange(Roles.GetUsersInRole(role)); 
} 
संबंधित मुद्दे