ASP.Net会员主要授权问题

时间:2012-03-22 20:34:30

标签: asp.net membership principalpermission

我遇到导致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'执行之前不会发生。

1 个答案:

答案 0 :(得分:0)

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

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