Проверьте групповые разрешения
У меня есть приложение ASP.NET MVC3. Мы добавили оконную аутентификацию. На каком-то контроллере мы должны сделать дальнейшую авторизацию.
Например, я хочу, чтобы страница предпочтений была доступна для просмотра для "ABCGroup", которую я пытался использовать: метод IsInRole("ABCGroup"). Это сработало, если пользователь является его непосредственным участником.
Если вошедший в систему пользователь не является непосредственным членом ABCGroup, IsInRole() не работает. Например, пользователь является частью группы администраторов, а группа администраторов является членом группы "ABCGroup", затем IsInRole ("ABCGroup" всегда возвращает false, если администраторы пытались открыть приложение.
В качестве альтернативы я создал пользовательский атрибут Authorize, который создаст коллекцию допустимых групп (используя класс DirectryEntry), а затем выберет коллекцию групп вошедшего в систему пользователя (используя HttpContext.Current.Request.LogonUserIdentity.Groups) и проверит, в допустимой коллекции.
Это работало, но для некоторых доменов это не удалось.
В "ABCGroup" следующие члены: 1. администраторы
"Администраторы" имеют: 1. Администратора 2. Лаборатория / Администратор 3. Лаборатория / Администраторы домена
Я вошел в систему как "lab\administrator" [lab is domain]. Я открыл приложение, и оно спросило меня о полномочиях. В диалоговом окне учетных данных, если я ввожу lab.sub.sub2\administrator, а затем пароль, он работает, но я ввожу "superdomain.lab.sub.sub2\administrator" его сбой. По умолчанию система использует "superdomain.lab.sub.sub2\administrator", поэтому запрашивает учетные данные.
Есть ли какая-нибудь функция, которая просто проверяет возможность доступа вошедшего в систему пользователя в группе, такой как LoggedUser.IsInRole(:Role name:)
Я видел CheckTokenMembership(), но на самом деле не мог использовать это в C#, я пытался с http://www.pinvoke.net/default.aspx/advapi32.checktokenmembership