الحصول على قائمة المستخدمين الذين ينتمون إلى دور استخدام "إدارة التخويل" (أزمان)

StackOverflow https://stackoverflow.com/questions/2599512

سؤال

باستخدام ASP.NET (C#) لقد أنشأت "إدارة التخويل" أن تسمح لي أن التعامل مع الأدوار على موقع على شبكة الإنترنت.إضافة المستخدمين إلى أدوار بسيطة Roles.AddUserToRole("DOMAIN\\UserName", "role").ومع ذلك أريد أن قائمة المستخدمين الذين ينتمون إلى هذا الدور ، ولكن منذ يتم تخزين سيد, عرض عليها أن لا تكون مفيدة.للحصول على المستخدمين ، وأنا أفكر XML يجب أن يكون استخدامها ، على الرغم من أنه من الممكن استخدام Interop COM إلى كل من يفعل ذلك و الحصول على اسم المستخدم ؟ وفي كلتا الحالتين, كيف يمكن الحصول على المستخدمين الذين ينتمون إلى دور ؟

الجدول لإدارة أدوار الأساس يكون مثل هذا الطقس:

Role    User
----    ----
admin   DOMAIN\UserName [delete]
        DOMAIN\UserName2 [delete]
        [add user text box]
news    DOMAIN\UserName3 [delete]
        [add user text box]
هل كانت مفيدة؟

المحلول

العثور على طريقة للقيام بذلك (IAzRole واجهة بفضل Bermo), حلقات خلال MembersName الملكية في كل دور.لا تحتاج إلى الخريطة مرة أخرى إلى حساب windows, إلا إذا كنت تحتاج إلى الحصول على أكثر من اسم المستخدم.

إعداد أدوار كما هو مفصل في المادة: كيفية:استخدام "إدارة التخويل" (أزمان) مع ASP.NET 2.0

في مشروع Visual Studio إضافة مرجع إلى أزمان COM مكتبة (azroles 1.0 نوع المكتبة).ثم يضاف using AZROLESLib;.إضافة <form id="form1" runat="server">, ثم في Page_Load:

AzAuthorizationStoreClass AzManStore = new AzAuthorizationStoreClass();
string connString = ConfigurationManager.ConnectionStrings["AuthorizationServices"].ConnectionString;
string path = Server.MapPath(connString.Substring("msxml://".Length));
AzManStore.Initialize(0, "msxml://" + path, null);
IAzApplication azApp = AzManStore.OpenApplication("AppName", null);
PlaceHolder p = new PlaceHolder();
StringBuilder sb = new StringBuilder();
sb.Append("<ul>");
foreach (IAzRole role in azApp.Roles)
{
    sb.Append("<li>");
    sb.Append(role.Name);
    sb.Append("<ul>");
    foreach (object member in (object[])role.MembersName)
    {
        sb.Append("<li>");
        sb.Append(member);
        sb.Append("</li>");
    }
    sb.Append("</ul>");
    sb.Append("</li>");
}
sb.Append("</ul>");
p.Controls.Add(new LiteralControl(sb.ToString()));
form1.Controls.Add(p);

هذا يعرض قائمة من أدوار أعضاء في كل دور.

نصائح أخرى

إذا كنت تخزين الخاص بك أزمان دور المعلومات في ملف XML ، يجب أن تكون قادرة على الحصول على قوائم سيد تحتوي على المستخدمين المخولين لكل دور باستخدام XPath (على الرغم من أن ربما فرصة جيدة لاستخدام LINQ2XML ...):

<AzAdminManager MajorVersion="2" MinorVersion="0" Description="My application">
 <AzApplicationGroup Name="Admin" Description="" GroupType="Basic">
  <BizRuleLanguage /> 
  <Member>S-1-5-21-3124078386-165137298-1092301467-1001</Member> 
  <Member>S-1-5-21-3124078386-165137298-1092301467-1003</Member> 
 </AzApplicationGroup>
 <AzApplicationGroup Name="Users" Description="" GroupType="Basic">
  <BizRuleLanguage /> 
  <Member>S-1-5-21-3124078386-165137298-1092301467-501</Member> 
 </AzApplicationGroup>
</AzAdminManager>

المشاركة التالية يظهر الكثير من الطرق خريطة SID مرة أخرى إلى حساب Windows - كيف يمكنني التحويل من SID إلى اسم حساب في C#.

علما أن دور الأعضاء يمكن أن تكون مجموعة إعلانية.بحيث لا يمكن تعداد جميع المستخدمين فقط من خلال النظر في دور الأعضاء.كنت بحاجة إلى الاستعلام الإعلانية أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top