Получить список пользователей, принадлежащих к роли, с помощью диспетчера авторизации (AzMan) - PullRequest
2 голосов
/ 08 апреля 2010

Используя ASP.NET (C #), я установил Диспетчер авторизации, который позволяет мне обрабатывать роли на веб-сайте. Добавлять пользователей в роли просто Roles.AddUserToRole("DOMAIN\\UserName", "role"). Однако я хочу перечислить пользователей, принадлежащих к роли, но, поскольку они хранятся в виде идентификаторов безопасности, их отображение не будет таким полезным. Чтобы привлечь пользователей, я думаю, что XML придется использовать, хотя возможно ли использовать COM Interop, чтобы сделать это и получить имя пользователя? В любом случае, как я могу получить пользователей, принадлежащих к роли?

Таблица для управления ролями в основном будет выглядеть так:

Role    User
----    ----
admin   DOMAIN\UserName [delete]
        DOMAIN\UserName2 [delete]
        [add user text box]
news    DOMAIN\UserName3 [delete]
        [add user text box]

Ответы [ 3 ]

2 голосов
/ 12 апреля 2010

Нашел способ сделать это (интерфейс IAzRole, спасибо Bermo), просматривая свойство MembersName для каждой роли. Нет необходимости сопоставлять данные с учетной записью Windows, если только вам не нужно получить больше, чем имя пользователя.

Установка ролей, как описано в статье: Как: использовать диспетчер авторизации (AzMan) с ASP.NET 2.0

В Visual Studio Project добавьте ссылку на библиотеку COM AzMan (библиотека типов 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);

Отображает список ролей и участников в каждой роли.

1 голос
/ 10 июня 2011

Обратите внимание, что членом роли может быть группа AD. Таким образом, вы не можете перечислить всех пользователей, просто взглянув на участников роли. Вам также необходимо запросить AD.

1 голос
/ 08 апреля 2010

Если вы храните информацию о своей роли Azman в файле 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 # .

...