MVC 5 – 角色 – IsUserInRole和添加用户角色

在MVC4中,我使用Roles.IsUserInRole来检查给定用户是否处于某个角色。 然而,有了MVC5,我不能再这样做了……

起初,它要求我在web.config上启用RoleManager,但后来我发现microsoft从Web.Security转移到了Microsoft.AspNet.Identity。

我现在的问题是,使用Microsoft.AspNet.Identity如何执行类似于Roles.IsUserInRole的操作? 和/或在角色和用户之间创建关系。

顺便说一下,我还在尝试理解新的身份validation方法(ClaimsIdentity?)。

您应该阅读http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx了解Identity 2.0的基础知识!

还有一个完整的演示项目可以帮助您入门: https : //github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys

如果你把它作为你的身份基础的基础,你最终会得到这样的东西:

var userManager = HttpContext.Current.GetOwinContext().GetUserManager(); const string name = "YourUsername" const string roleName = "Admin"; var user = userManager.FindByName(name); //check for user roles var rolesForUser = userManager.GetRoles(user.Id); //if user is not in role, add him to it if (!rolesForUser.Contains(role.Name)) { userManager.AddToRole(user.Id, role.Name); } 

上面的post非常有用(感谢Serv,如果我的名声允许,我会投票)。 它帮助我解决了我遇到的一些问题,只做了一些小改动,以适应我想要实现的目标。 我特别的问题是我想检查MVC视图,如果当前用户在给定的角色组中。 我还发现Roles.IsUserInRole不再工作了。

如果您在视图中执行此操作,但使用ASP.NET标识2.0而不是以前的MVC版本提供的简单成员资格提供程序,则以下可能有助于作为单行解决方案:

 bool isAdmin = HttpContext.Current.User.IsInRole("Admin"); 

然后,您可以将其与HTML结合使用,以选择性地显示菜单项(这是我一直在使用它),具体如下:

 @if (isAdmin) { 
  • @Html.ActionLink("Users", "List", "Account")
  • }

    这允许我阻止访问用户不是“管理员”角色成员的用户管理超链接。