首页 文章

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

提问于
浏览
5

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

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

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

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

2 回答

  • 10

    您应该阅读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<ApplicationUserManager>();
    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);
    }
    
  • 6

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

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

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

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

    @if (isAdmin)
    {
        <li>@Html.ActionLink("Users", "List", "Account")</li>
    }
    

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

相关问题