User.IsInRole(строка) и несколько доменов
Я использовал WindowsPrincipal.IsInRole(string), чтобы проверить, есть ли у пользователя доступ к определенным функциям контроллера, и все ли работает хорошо. Новое требование означало, что пользователям из второго домена требовался доступ к сайту интрасети, поэтому во втором домене были созданы соответствующие группы AD, и эти пользователи были назначены в эти группы.
Эти пользователи могли подключаться, но их доступ был прерывистым - иногда они получали ограниченные просмотры, а иногда - нет. Было отмечено, что, поскольку они подключали пользователей из исходного домена, казалось, теряли весь их доступ к ограниченным представлениям.
Исходный код выглядит примерно так (обратите внимание, без доменных префиксов):
if (User.IsInRole("GroupName1"))
{
return View("GroupName1");
}
if (User.IsInRole("GroupName2"))
{
return View("GroupName2");
}
return View("GroupNameNone");
Первоначально пользователи из AD1\GroupName1 получили представление GroupName1, но как только пользователь из AD2\GroupName1 подключился, первоначальный пользователь получил представление GroupNameNone. По мере того, как люди подключаются / отключаются, чей пользователь проходит проверку, похоже, меняется.
Итак, мой вопрос: что здесь происходит? Просматривается ли имя группы и кешируется ли SID (или аналогичный) в фоновом режиме? Кажется, это подходит, так как кэшированный SID будет меняться при подключении пользователей из разных доменов.
Я также предполагаю (но пока не могу проверить), что префикс чеков с доменом (как показано ниже) решит проблему, есть ли у кого-то мнение по этому поводу или нам нужно создавать группы AD с разными именами в разных доменах?
Код домена:
if (User.IsInRole(@"AD1\GroupName1") || User.IsInRole(@"AD2\GroupName1"))
{
return View("GroupName1");
}
if (User.IsInRole(@"AD1\GroupName2") User.IsInRole(@"AD2\GroupName2"))
{
return View("GroupName2");
}
return View("GroupNameNone");
Большое спасибо за любую помощь.