2

ASP.NET (C#) を使用して、Web サイトでロールを処理できるように承認マネージャーをセットアップしました。ユーザーをロールに追加するのは簡単Roles.AddUserToRole("DOMAIN\\UserName", "role")です。ただし、ロールに属するユーザーを一覧表示したいのですが、それらは SID として保存されているため、それらを表示してもあまり役に立ちません。ユーザーを取得するには、XML を使用する必要があると思いますが、COM 相互運用機能を使用してそれとユーザー名の両方を取得することは可能ですか? いずれにせよ、ロールに属するユーザーを取得するにはどうすればよいですか?

ロールを管理するテーブルは、基本的に次のようになります。

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

3 に答える 3

3

各ロールのMembersNameプロパティをループして、それを行う方法を見つけました(IAzRoleインターフェイス、Bermoのおかげで)。ユーザー名以上のものを取得する必要がない限り、Windowsアカウントにマップし直す必要はありません。

記事で詳しく説明されているように役割を設定する:方法:ASP.NET2.0でAuthorizationManager(AzMan)を使用する

Visual Studio Projectで、AzMan COMライブラリ(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);

これにより、役割と各役割のメンバーのリストが表示されます。

于 2010-04-12T10:10:47.247 に答える
1

Azman ロール情報を XML ファイルに保存している場合は、XPath を使用して各ロールの承認済みユーザーを含む SID のリストを取得できるはずです (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# .

于 2010-04-08T12:44:18.507 に答える
1

ロール メンバーは AD グループになることができることに注意してください。そのため、ロール メンバーを見るだけですべてのユーザーを列挙することはできません。ADにもクエリを実行する必要があります。

于 2011-06-10T18:19:59.753 に答える