Основные вопросы членства в ASP.Net
Я столкнулся с проблемой с PrinciplePermissionAttribute
вызывая исключения. Любые страницы, где у меня есть атрибут на Load
Метод выдает исключение сразу после первоначального входа в систему.
<PrincipalePermission(SecurityAction.Demand, role:="Level1")> _
Protected Sub Page_Load(ByVal sender As Object, ByVal e as System.EventArgs) Handles Me.Load
End Sub
Это исключение Request for principal permission failed
,
Если я удаляю это, страница загружается нормально, и я могу перейти на другую страницу, которая имеет тот же атрибут, и он работает безупречно. Также, если я использую системы членства Roles.IsUserInRole()
Функция у меня не проблема.
Я заметил, что после первоначального входа мой Thread.CurrentPrincipal
имеет тип GenericPrincipal
а не RolePrincipal
, Последующие запросы показывают правильный тип вместо универсального. Я пытался заставить это в Global.asax
файл в PostAuthenticate
событие, но asp.net, кажется, устанавливает GenericPrincipal
после того как это произойдет.
Любые идеи о том, как исправить это поведение, или я застрял с помощью Roles.IsUserInRole()
метод?
ОБНОВИТЬ
После нахождения некоторого объяснения тому, что происходит в конвейере, я могу понять, почему это происходит в Global.asax
не помогло У меня был прототип проекта, который я проверил ранее, и я не смог воспроизвести его там. Мне интересно, имеет ли это какое-либо отношение к типу проекта. Прототип является проектом веб-сайта, а проблемным является проект веб-приложения.
Я думаю, странно, что GenericPrincipal
изменяется на RolePrincipal
но только после того, как начальный запрос обработан. Так что трудно сказать, что он не работает так, как будто его просто не происходит до того, как исполняется мой Page_Load.
1 ответ
Я думаю, что вы используете проверку подлинности с помощью форм...
Атрибут PrincipalPermission проверяет Thread.CurrentPrincipal. Roles.IsUserInRole() проверяет HttpContext.Current.User. Поэтому, если они отличаются, вы можете исправить это в файле Global.asax в событии Application_AuthenticateRequest.