使用ASP.NET(C#)我已经设置了授权管理器,允许我处理网站上的角色。添加到角色的用户很简单Roles.AddUserToRole("DOMAIN\\UserName", "role")
。但是,我想列出属于某个角色的用户,但由于它们存储为SID,因此显示它们并没有那么有用。为了获得用户,我认为必须使用XML,尽管可以使用COM Interop来做到这一点并获取用户名吗?无论哪种方式,我如何让属于某个角色的用户?
管理角色的表基本上是这样的:
Role User
---- ----
admin DOMAIN\UserName [delete]
DOMAIN\UserName2 [delete]
[add user text box]
news DOMAIN\UserName3 [delete]
[add user text box]
答案 0 :(得分:2)
找到了一种方法(IAzRole接口,感谢Bermo),循环遍历每个角色的MembersName属性。无需映射回Windows帐户,除非您需要获得的不仅仅是用户名。
设置角色,详见文章:How To: Use Authorization Manager (AzMan) with ASP.NET 2.0
在Visual Studio Project中添加对AzMan COM库的引用(azroles 1.0 Type Library)。然后添加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 :(得分:1)
如果要将Azman角色信息存储在XML文件中,您应该能够使用XPath获取包含每个角色的授权用户的SID列表(尽管可能是使用LINQ2XML的好机会......): p>
<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帐户的多种方法 - How can I convert from a SID to an account name in C#。
答案 2 :(得分:1)
请注意,角色成员可以是AD组。因此,您无法仅通过查看角色成员来枚举所有用户。您还需要查询AD。