我遇到导致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()
方法?
更新
在找到对管道{3}}中发生的事情的一些解释后,我可以看到为什么在Global.asax
中更改它没有帮助。我之前有一个原型项目,我测试了它,我无法在那里重现它。我想知道它是否与项目类型有关。原型是一个Web站点项目,有问题的是Web应用程序项目。
我认为奇怪的是GenericPrincipal
已更改为RolePrincipal
,但仅在初始请求处理完毕之后。所以很难说它不能正常工作只是在我的'Page_Load'执行之前不会发生。
答案 0 :(得分:0)
我认为您正在使用表单身份验证...
PrincipalPermission属性检查Thread.CurrentPrincipal。 Roles.IsUserInRole()检查HttpContext.Current.User。因此,如果它们不同,您可以在Application_AuthenticateRequest事件中的Global.asax文件中更正此内容。