ASP.Net 成员(member)主体权限问题

标签 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

这会引发异常请求主体权限失败

如果我删除此页面,则页面加载正常,并且我可以导航到具有相同属性的另一个页面,并且它可以完美地工作。另外,如果我使用成员(member)系统 Roles.IsUserInRole() 函数,我就没有问题。

我注意到,初次登录后,我的 Thread.CurrentPrincipal 类型为 GenericPrincipal,而不是 RolePrincipal。后续请求将显示正确的类型来代替通用类型。我尝试在 PostAuthenticate 事件中的 Global.asax 文件中强制执行此操作,但在发生这种情况后,asp.net 似乎正在设置 GenericPrincipal

关于如何修复此行为的任何想法,或者我是否坚持使用 Roles.IsUserInRole() 方法?

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

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

最佳答案

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

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

关于ASP.Net 成员(member)主体权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830077/

相关文章:

c# - 如何取消选择 GridView 中的所有行 - asp.net?

asp.net - 如何检查密码答案是否与用户在 ASP.Net 中提供的内容相匹配

asp.net - 将声明式的 PrimaryPermission 转换为编程式的 .Demand

javascript - 与 DropDownList 和 TexBox 元素的宽度相同

c# - 使用 Entity Framework 手动输入 key

mysql - 在 MVC2 中使用 MySQL 的成员资格提供程序

c# - ASP.NET 成员资格 - 从成员资格表中检索密码和 PasswordSalt - 哈希用户 ID

c# - SecurityManager.IsGranted() 行为

c# - 如何使用 ASP.NET 和 jQuery 返回 JSON