У меня проблема с 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()
?
UPDATE
После нахождения некоторого объяснения тому, что происходит в конвейере здесь , я могу понять, почему его изменение в Global.asax
не помогло. У меня был прототип проекта, который я проверил ранее, и я не смог воспроизвести его там. Мне интересно, имеет ли это какое-либо отношение к типу проекта. Прототип является проектом веб-сайта, а проблемным является проект веб-приложения.
Мне кажется странным, что GenericPrincipal
меняется на RolePrincipal
, но только после того, как начальный запрос обработан. Так что трудно сказать, что он не работает, как будто его просто не происходит до того, как исполняется мой Page_Load.