WindowsPrincipal.IsInRole () не возвращает ожидаемый результат
-
08-07-2019 - |
Вопрос
Итак, вот мой текущий код:
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 (& Quot; String & Quot;). Я предполагаю, что он будет использовать DC по умолчанию независимо от того, какой компьютер использует.
Странно, что компьютеры в офисе, где это работает, могут находиться в двух отдельных доменах. В объекте List<string>
у меня есть оба возможных домена. поэтому он может содержать такие элементы, как " domainA \ groupA " ;, " domainA \ userB " ;, domainB \ groupC " и / или & Quot; DomainB \ userD Quot &;.
Итак, моя главная проблема в том, что функция IsInRole никогда не возвращает true. я знаю, что так и должно быть, я даже протестировал его с пользователями domainA \ Domain и все равно получил ложное возвращение.
Есть идеи? изменение кода возможно, но не требуется. я не на 100%, я могу даже скомпилировать его ...
Решение 2
Ну, чтобы решить проблему, мне просто нужно было добавить каждого пользователя группы вместо имени группы ...
У кого-нибудь еще есть идеи?
Другие советы
Я должен указать, действительно ли вы правильно экранировали свой символ '\' внутри своих строк? Как в & Quot; domainA \\ groupA & Quot;?
Я видел проблемы, когда люди пытались использовать списки электронной почты Outlook в Active Directory для обеспечения безопасности на основе ролей. Они отображаются в Active Directory и их трудно отличить от реальных групп безопасности (группы, на которые вы можете ссылаться в ACL и т. Д.). Попросите своего администратора проверить, какие группы вы используете, это группы безопасности.