2012-03-22 69 views
3

我遇到了导致异常的PrinciplePermissionAttribute问题。初次登录后,我在Load方法中拥有该属性的任何页面都会立即引发异常。ASP.Net会员委托人允许问题

<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。随后的请求会显示正确的类型来代替通用。我试图在PostAuthenticate事件中的Global.asax文件中强制执行此操作,但是在发生这种情况后,asp.net似乎正在设置GenericPrincipal

有关如何解决此问题的任何想法,还是我坚持使用Roles.IsUserInRole()方法?

UPDATE
找到一些解释成什么在管道here发生的事情,我可以看到为什么在Global.asax改变它并没有帮助后。我有一个早期的原型项目,我测试了这一点,但我不能在那里重现它。我想知道它是否与项目类型有关。原型是一个Web站点项目,问题是一个Web应用程序项目。

我认为奇怪的是,GenericPrincipal被更改为RolePrincipal,但只有在初始请求处理完毕后。所以很难说它不像我们的'Page_Load'执行时那样工作。

回答

0

我认为你正在使用窗体身份验证...

属性的PrincipalPermission检查Thread.CurrentPrincipal中。 Roles.IsUserInRole()检查HttpContext.Current.User。所以,如果它们不同,你可以在Application.AuthenticateRequest事件中的Global.asax文件中进行更正。