3

我遇到了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()方法?

更新在这里
找到了对管道中发生的事情的一些解释后,我可以看到为什么在其中更改它没有帮助。我之前有一个原型项目,我用它进行了测试,但我无法在那里重现它。我确实想知道它是否与项目类型有关。原型是一个网站项目,而有问题的是一个 Web 应用程序项目。Global.asax

我确实认为将其GenericPrincipal更改为RolePrincipal但仅在初始请求已处理后才更改为奇怪。所以很难说它没有像它一样在我的“Page_Load”执行之前不会发生。

4

1 回答 1

0

我认为您正在使用表单身份验证...

PrincipalPermission 属性检查 Thread.CurrentPrincipal。Roles.IsUserInRole() 检查 HttpContext.Current.User。因此,如果它们不同,您可以在 Application_AuthenticateRequest 事件的 Global.asax 文件中更正此问题。

于 2012-03-23T05:41:30.153 回答