2010-04-08 29 views
2

Utilisation d'ASP.NET (C#) J'ai configuré le Gestionnaire d'autorisations pour me permettre de gérer des rôles sur un site Web. Les utilisateurs ajoutés aux rôles est simple Roles.AddUserToRole("DOMAIN\\UserName", "role"). Cependant, je souhaite répertorier les utilisateurs appartenant à un rôle, mais comme ils sont stockés en tant que SID, leur affichage ne serait pas très utile. Pour obtenir les utilisateurs, je pense que XML devrait être utilisé, mais est-il possible d'utiliser COM Interop pour faire cela et obtenir le nom d'utilisateur? De toute façon, comment puis-je obtenir les utilisateurs appartenant à un rôle?Obtenir la liste des utilisateurs appartenant à un rôle à l'aide du Gestionnaire d'autorisations (AzMan)

Le tableau de gérer les rôles serait essentiellement comme ceci:

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

Répondre

2

J'ai trouvé une façon de le faire (Interface IAzRole, grâce à Bermo), en bouclant la propriété MembersName sur chaque rôle. Pas besoin de mapper vers un compte Windows, sauf si vous avez besoin d'obtenir plus que le nom d'utilisateur.

rôles de configuration détaillées dans l'article: How To: Use Authorization Manager (AzMan) with ASP.NET 2.0

dans le projet Visual Studio ajouter une référence à la bibliothèque AzMan COM (azroles 1.0 Type Library). Puis ajoutez using AZROLESLib;. Ajouter <form id="form1" runat="server">, puis à 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); 

Cette affiche une liste des rôles et des membres de chaque rôle.

1

Si vous stockez vos informations de rôle Azman dans un fichier XML, vous devriez être en mesure d'obtenir des listes de contenir les utilisateurs autorisés de SID pour chaque rôle à l'aide XPath (mais peut-être une bonne occasion d'utiliser 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> 

Le message suivant montre beaucoup de façons de mapper un SID retour à un compte Windows - How can I convert from a SID to an account name in C#.

+0

AzMan n'a donc pas intégré de recherche inversée, c'est-à-dire que les requêtes XPath et LDAP sont les seules possibles? – SamWM

+0

Bien que je ne puisse pas vérifier que cela fonctionne, j'ai remarqué que l'interface IAzRole a une propriété MembersName. Le doc doc indique qu'il effectue la recherche inversée pour vous - http://msdn.microsoft.com/en-us/library/aa378219(v=VS.85).aspx – Bermo

1

Notez qu'un membre de rôle peut être un groupe AD. Vous ne pouvez donc pas énumérer tous les utilisateurs en regardant simplement les membres du rôle. Vous devez également interroger AD.