ASP.NET MVC中如何通过FormsAuthentication获取当前用户的角色名称?
获取ASP.NET MVC中当前用户的角色名称
看来你已经把自定义角色的核心逻辑跑通了——授权验证和角色判断都正常工作,这步已经很稳了!要拿到当前用户的实际角色名称,其实直接从你在Application_PostAuthenticateRequest里设置的用户主体对象里提取就行,毕竟你当时肯定是把角色信息封装到GenericPrincipal里了对吧?
直接改你的Index方法就行,看下面的代码:
[Authorize] public ActionResult Index() { bool isAdmin = System.Web.HttpContext.Current.User.IsInRole("admin"); Response.Write("isAdmin: " + isAdmin); // 把当前用户转换为GenericPrincipal(就是你在PostAuthenticateRequest里用的类型) var currentPrincipal = User as System.Web.Security.GenericPrincipal; string roleName = string.Empty; if (currentPrincipal != null && currentPrincipal.Roles.Length > 0) { // 如果用户有多个角色,用逗号拼接起来;单个角色直接取第一个就行 roleName = string.Join(", ", currentPrincipal.Roles); } Response.Write("roleName: " + roleName); return View(); }
为什么这方法管用?
你在Application_PostAuthenticateRequest里的逻辑应该是这样的:从数据库或其他存储源拿到用户的角色列表,创建一个GenericPrincipal实例把角色数组传进去,再赋值给HttpContext.Current.User。这个GenericPrincipal的Roles属性就存着当前用户的所有角色名称,所以我们只需要把当前User转成这个类型,就能直接读取角色列表了。
如果你的业务场景里用户只会有单个角色,也可以简化成roleName = currentPrincipal.Roles[0];,但记得一定要加非空判断,避免角色数组为空时抛出索引越界的异常。
内容的提问来源于stack exchange,提问作者Milacay
相关产品推荐
相关产品推荐

