私は、ユーザー名が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);
}
.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のユーザーやグループを簡単に操作できます。
Program
のstatic void Main()
メソッドで実装された@marc_sの例からのわずかな逸脱:
DomainCtx = new PrincipalContext( ContextType.Domain , Environment.UserDomainName );
if ( DomainCtx != null ) {
User = UserPrincipal.FindByIdentity( DomainCtx , Environment.UserName );
}
DomainCtx
とUser
は両方ともProgram
で宣言された静的プロパティです
次に、他の形式では、私は単にこのようなことをします:
if ( Program.User.IsMemberOf(GroupPrincipal.FindByIdentity(Program.DomainCtx, "IT-All") )) {
//Enable certain Form Buttons and objects for IT Users
}
この方法ではできません。 Active Directoryを照会する必要があります。 ADのラッパーを使用できます。チェックアウト http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S