Получить список пользователей, принадлежащих к роли, с помощью диспетчера авторизации (AzMan)
Используя 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 ответа
Нашел способ сделать это (Интерфейс 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);
Это отображает список ролей и участников в каждой роли.
Если вы храните информацию о своей роли 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#.
Обратите внимание, что членом роли может быть группа AD. Таким образом, вы не можете перечислить всех пользователей, просто взглянув на участников роли. Вам нужно будет также запросить AD.