我正在为ASP.NET MVC App添加授权,但是遇到了障碍。我终于能够连接到我们的自定义成员资格提供程序,并为该应用程序进行身份验证。现在,按预期方式,如果我将[Authorize]属性添加到控制器中,则必须对用户进行身份验证才能查看该页面。我还成功测试了[Authorize(Users =“ {userName}”)],该方法也可以将页面限制为该特定用户。
问题是[Authorize(Roles =“ {RoleName}”))似乎无法正常工作。如果我将该属性添加到控制器,则每次尝试访问相应页面时,都会重定向到我们的登录页面。如果用户没有所需的角色,这是我期望发生的事情,但是即使用户具有该角色,也正在发生这种情况。我已经在视图,控制器和帮助器方法中检查了User.IsInRole(“ {roleName}”)和HttpContext.Current.User.IsInRole(“ {roleName}”),该方法始终返回“ False”。
我已经验证与我合作的用户具有我要授权的角色。我还在WebForms应用程序中测试了这些用户,该应用程序通过相同的角色来限制页面访问,并且运行良好。我认为自己的某个地方设置有问题或缺少一些简单的信息,但是在整个上午搜索之后,我还没有发现任何使我离解决方案更近的东西,因此我希望这里的人能够为我提供帮助。
最佳答案
首先:使用探查器,并在执行HttpContext.Current.User.IsInRole(“ {roleName}”)行时,检查sql查询是什么。
如果不进行查询,则可能是cacheRolesInCookie =“ true”,IsInRole将在FormsAuthenticationTicket中检查UserData。请确保在创建FormsAuthenticationTicket时,将userdata参数设置为具有用户角色的逗号分隔的字符串。