Как проверить, принадлежит ли пользователь к группе объявлений?
Сначала я думал, что приведенный ниже код работает, потому что если у меня есть группа как "IT", она работает правильно, потому что мое имя пользователя находится в группе IT в active directory. То, что я узнал, это всегда возвращает true независимо от того, есть ли у меня имя пользователя в группе IT или нет, и если я изменяю его на любую другую группу, я в ней возвращаю всегда возвращает 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);
}
3 ответа:
Так как вы находитесь на .NET 3.5 и выше, вы должны проверить
System.DirectoryServices.AccountManagement
(S.DS.AM) пространство имен. Читайте Все об этом здесь:
- Управление участниками безопасности каталогов в .NET Framework 3.5
- MSDN docs on System.Каталог.AccountManagement
В принципе, вы можете определить контекст домена и легко найти пользователей и/или группы в 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 очень легко играть с пользователями и группами в рекламе!
Небольшое отклонение от примера @marc_s, реализованного в методе
static void Main()
вProgram
: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. Вы можете использовать обертку для рекламы. Проверить http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S