一开始我认为下面的代码可以工作,因为如果我的组是“IT”,它就可以正常工作,因为我的用户名在Active Directory的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);
}
5条答案
按热度按时间mklgxw1f1#
既然你使用的是.NET3.5或更高版本,你应该看看
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。基本上,您可以定义域上下文并轻松查找AD中的用户和/或组:
新的S.DS.AM使得在AD中与用户和组玩耍变得非常容易!
x8diyxa72#
与在
Program
的static void Main()
方法中实现的@marc_s示例略有不同:DomainCtx
和User
都是在Program
下声明的静态属性然后在其他形式中我简单地做这样的事情:
ifsvaxew3#
检查当前用户是否在组中
pokxtpni4#
您无法通过这种方式执行此操作。您应该查询Active Directory。您可以使用AD的 Package 。请查看http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S
svmlkihl5#
为什么不: