web-dev-qa-db-ja.com

ユーザーがADグループに属しているかどうかを確認する方法は?

私は、ユーザー名がActive DirectoryのITグループに属しているため、「IT」としてグループを持っている場合、正しく機能するため、最初は以下のコードが機能すると考えました。私が学んだことは、ITグループにユーザー名があるかどうかにかかわらず常にtrueを返し、それを他のグループに変更すると、常にfalseを返します。任意の助けをいただければ幸いです。

    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // tab control security for admin tab
        bool admin = checkGroup("IT");

        if ((admin == true) && (tabControl1.SelectedTab == tpHistory))
        {
            tabControl1.SelectedTab = tpHistory;
        }
        else if ((admin == false) && (tabControl1.SelectedTab == tpHistory))
        {
            tabControl1.SelectedTab = tpRequests;
            MessageBox.Show("Unable to load tab. You have insufficient privileges.",
                "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
    }

    // check Active Directory to see if user is in Marketing department group
    private static bool checkGroup(string group)
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
50
Sealer_05

.NET 3.5以降を使用しているので、System.DirectoryServices.AccountManagement(S.DS.AM)名前空間。ここですべてを読んでください:

基本的に、ドメインコンテキストを定義して、ADのユーザーやグループを簡単に見つけることができます。

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME");

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");

if(user != null)
{
   // check if user is member of that group
   if (user.IsMemberOf(group))
   {
     // do something.....
   } 
}

新しいS.DS.AMを使用すると、ADのユーザーやグループを簡単に操作できます。

101
marc_s

Programstatic void Main()メソッドで実装された@marc_sの例からのわずかな逸脱:

DomainCtx = new PrincipalContext( ContextType.Domain , Environment.UserDomainName );
if ( DomainCtx != null ) {
    User = UserPrincipal.FindByIdentity( DomainCtx , Environment.UserName );
}

DomainCtxUserは両方ともProgramで宣言された静的プロパティです

次に、他の形式では、私は単にこのようなことをします:

if ( Program.User.IsMemberOf(GroupPrincipal.FindByIdentity(Program.DomainCtx, "IT-All") )) {
    //Enable certain Form Buttons and objects for IT Users

}
12
GoldBishop

この方法ではできません。 Active Directoryを照会する必要があります。 ADのラッパーを使用できます。チェックアウト http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S

0