C# 使用授权管理器(AzMan)获取属于某个角色的用户列表
我使用ASP.NET(C#)设置了授权管理器,允许我处理网站上的角色。将用户添加到角色是简单的C# 使用授权管理器(AzMan)获取属于某个角色的用户列表,c#,asp.net,authorization,azman,authorizationmanager,C#,Asp.net,Authorization,Azman,Authorizationmanager,我使用ASP.NET(C#)设置了授权管理器,允许我处理网站上的角色。将用户添加到角色是简单的角色。AddUserToRole(“域\\用户名”,“角色”)。但是,我想列出属于某个角色的用户,但由于它们存储为SID,因此显示它们并没有多大帮助。为了获得用户,我认为必须使用XML,尽管可以使用COM互操作来实现这一点并获得用户名吗?无论哪种方式,我怎样才能获得属于某个角色的用户 管理角色的表基本上如下所示: Role User ---- ---- admin DOMAIN\User
角色。AddUserToRole(“域\\用户名”,“角色”)
。但是,我想列出属于某个角色的用户,但由于它们存储为SID,因此显示它们并没有多大帮助。为了获得用户,我认为必须使用XML,尽管可以使用COM互操作来实现这一点并获得用户名吗?无论哪种方式,我怎样才能获得属于某个角色的用户
管理角色的表基本上如下所示:
Role User
---- ----
admin DOMAIN\UserName [delete]
DOMAIN\UserName2 [delete]
[add user text box]
news DOMAIN\UserName3 [delete]
[add user text box]
如果您将Azman角色信息存储在XML文件中,则应该能够使用XPath获取包含每个角色的授权用户的SID列表(尽管可能是使用LINQ2XML的好机会……):
找到了一种方法(IAzRole接口,多亏了Bermo),在每个角色上循环使用MembersName属性。无需映射回windows帐户,除非您需要获取超过用户名
设置角色,如文章所述:
在Visual Studio项目中,添加对AzMan COM库(azroles 1.0类型库)的引用。然后使用AZROLESLib添加代码>。添加
,然后在页面加载:
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);
AzAuthorizationStoreClass AzManStore=新的AzAuthorizationStoreClass();
string connString=ConfigurationManager.ConnectionString[“AuthorizationServices”]。ConnectionString;
string path=Server.MapPath(connString.Substring(“msxml:/”.Length));
初始化(0,“msxml://“+path,null);
IAzApplication azApp=AzManStore.OpenApplication(“AppName”,null);
占位符p=新占位符();
StringBuilder sb=新的StringBuilder();
某人加上(“”);
foreach(azApp.Roles中的IAzRole角色)
{
某人加上“- ”;
sb.Append(角色名称);
某人加上(“
”);
foreach(对象[]角色中的对象成员。成员名称)
{
某人加上“- ”;
某人(成员);
某人追加(“
”);
}
某人追加(“
”);
某人追加(“ ”);
}
某人追加(“
”);
p、 Add(新的LiteralControl(sb.ToString());
表1.对照品添加(p);
这将显示每个角色中的角色和成员列表。请注意,角色成员可以是广告组。因此,不能仅通过查看角色成员来枚举所有用户。您还需要查询AD。因此AzMan没有内置反向查找,即XPath和LDAP查询是唯一的方法?尽管我无法验证它是否有效,但我注意到IAzRole接口有一个MembersName属性。COM文档表明它为您执行反向查找-
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);