C# 使用授权管理器(AzMan)获取属于某个角色的用户列表

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

我使用ASP.NET(C#)设置了授权管理器,允许我处理网站上的角色。将用户添加到角色是简单的
角色。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);