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");

Большое спасибо за любую помощь.

0 ответов

Другие вопросы по тегам