2010-04-08 36 views
2

使用ASP.NET(C#)我已经设置了授权管理器来允许我处理网站上的角色。新增用户到角色很简单Roles.AddUserToRole("DOMAIN\\UserName", "role")。不过,我想列出属于某个角色的用户,但由于它们是以SID的形式存储的,因此显示它们并不会有帮助。为了获得用户,我认为必须使用XML,尽管是否可以使用COM Interop来实现这一点并获取用户名?无论哪种方式,我如何获得属于角色的用户?使用授权管理器(AzMan)获取属于角色的用户列表

管理角色表将基本上是这样的:

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

回答

2

找到一种方法(IAzRole接口,感谢Bermo),循环遍历每个角色的MembersName属性。无需映射回Windows帐户,除非您需要获取比用户名更多的信息。在文章中详述

设置角色:How To: Use Authorization Manager (AzMan) with ASP.NET 2.0

在Visual Studio项目到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

如果你在一个XML文件中存储你的阿兹曼角色信息,你应该能够得到一个包含每个授权用户的SID列表角色使用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帐户 - How can I convert from a SID to an account name in C#

+0

那么AzMan没有获得内置的反向查找,即XPath和LDAP查询的唯一方法? – SamWM 2010-04-09 09:10:20

+0

虽然我无法验证它的工作原理,但我注意到IAzRole接口具有MembersName属性。 COM doco表示它为您执行反向查找 - http://msdn.microsoft.com/zh-cn/library/aa378219(v=VS.85).aspx – Bermo 2010-04-09 13:01:01

1

请注意,角色成员可以是AD组。所以你不能通过查看角色成员来枚举所有用户。你还需要查询AD。

相关问题