Невозможно получить список членов группы домена для пользователя - PullRequest
0 голосов
/ 29 октября 2018

Я использую код C # ниже, чтобы проверить, входит ли пользователь в требуемую группу членов домена.

Передаваемое имя пользователя является частью 3 групп участников, но код возвращает имя первого члена группы домена и выходит из цикла for. Пожалуйста, помогите мне получить полный список доменной группы для пользователя.

bool bReturn = false;
string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new     PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
    using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
    {
        oSearcher.QueryFilter.SamAccountName = sUserName;
        Principal oPrincipal = oSearcher.FindOne();
        foreach (Principal oPrin in oPrincipal.GetGroups())
        {
            if (oPrin.Name.Trim().ToString().Equals(sGroupName))
            {
                bReturn = true;
                break;
            }
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Вместо цикла используйте метод IsMemberOf:

bReturn = oPrincipal.IsMemberOf(oContext, IdentityType.Name, sGroupName);

Это будет , вероятно работать для вас. Но имейте в виду, что это (и ваш метод цикла) будет работать только в том случае, если группа указана в атрибуте memberOf пользователя. Если:

  1. В вашем лесу AD есть несколько доменов, и
  2. Группа, с которой вы работаете, - глобальная или локальная, и
  3. Группа не находится в том же домене, что и пользователь

тогда не получится.

Я говорю об этом в одной из статей, которые я написал на моем сайте: Узнайте, является ли один пользователь членом группы

0 голосов
/ 30 октября 2018

Код c # не может получить сведения о членстве в AD из-за проблемы с привилегиями. Я использовал net group "<GroupName>", чтобы получить список пользователей как часть группы, а затем проверил требуемого пользователя в списке.

Это еще одна возможность проверить, что пользователь является членом требуемой группы.

0 голосов
/ 29 октября 2018

скажи мне, если я ошибаюсь. Я могу видеть только одну цель, чтобы вернуть бул? Кстати, даже если это не так, попробуйте удалить break;

bool bReturn = false;

string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new     PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
    using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
    {
        oSearcher.QueryFilter.SamAccountName = sUserName;
        Principal oPrincipal = oSearcher.FindOne();
        foreach (Principal oPrin in oPrincipal.GetGroups())
        {
            if (oPrin.Name.Trim().ToString().Equals(sGroupName))
            {
                //your stuff here (assign vars, values etc)
                bReturn = true; // <-- 
            }
        }
    }
}

потому что, основываясь на используемой логике, если она удовлетворяет одному условию, она остановит цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...