WindowsPrincipal.IsInRole() не возвращает ожидаемый результат
Итак, вот мой текущий код:
List<string> rowGroups = GetFileGroups((int)row.Cells["document_security_type"].Value);
bool found = false;
System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent());
foreach (string group in rowGroups)
{
if (p.IsInRole(group))
{
found = true;
break;
}
}
Это было сделано пару месяцев назад кем-то, и мне трудно понять, почему это не работает. Компания недавно перешла от одного доменного имени к другому. Поэтому мне было любопытно, какой контроллер домена будет использовать функция p.IsInRole("String"). Я предполагаю, что он будет использовать DC по умолчанию независимо от того, какой компьютер использует.
Странно, что компьютеры в офисе, где это работает, могут находиться в двух отдельных доменах. в List<string>
объект, у меня есть оба возможных домена. поэтому он может содержать такие элементы, как "domainA\groupA", "domainA\userB", domainB\groupC"и / или"domainB\userD".
Поэтому моя главная проблема заключается в том, что функция IsInRole никогда не возвращает true. я знаю, что должен, я даже проверил это с пользователями domainA\Domain и все еще получил ложное возвращение.
Есть идеи? изменение кода возможно, но не требуется. я не 100%, я могу даже скомпилировать это...
3 ответа
Ну, чтобы решить проблему, мне просто нужно было добавить каждого пользователя группы вместо имени группы...
У кого-то еще есть идеи?
Я должен указать на то, что вы действительно правильно экранировали свой символ \ внутри своих строк? Как в "домене A\\groupA"?
Я видел проблемы, когда люди пытались использовать списки электронной почты Outlook в Active Directory для обеспечения безопасности на основе ролей. Они отображаются в Active Directory и их трудно отличить от реальных групп безопасности (на которые вы можете ссылаться в ACL и т. Д.). Попросите своего администратора проверить, какие группы вы используете, это группы безопасности.