MVC 5 - Roles - IsUserInRole and Adding user to role

前端 未结 2 1468
执笔经年
执笔经年 2020-12-16 06:34

In MVC4 i used Roles.IsUserInRole to check if a given user is in some role. However, with MVC5 i can\'t do it anymore...

At first, it asked me to enable RoleManager

相关标签:
2条回答
  • 2020-12-16 07:25

    The post above was really helpful (Thanks Serv, would vote up if my reputation allowed me to). It helped me solve an issue I was having with a few minor changes to fit what I was trying to achieve. My particular problem was that I wanted to check in an MVC view if the current user was in a given role group. I also found that Roles.IsUserInRole was no longer working.

    If you are doing this in a view, but using ASP.NET identity 2.0 instead of the simple membership provider offered by previous MVC versions, the following might be helpful as a 1-line solution:

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

    You may then combine it with HTML to selectively show menu items (which is what I've been using it for) with something like this:

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

    This allows me to prevent access to the user management hyperlinks where the user is not a member of the 'Admin' role.

    0 讨论(0)
  • 2020-12-16 07:38

    You should read http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx for the basics of Identity 2.0!

    There's also a complete demo project to get you started: https://github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys

    If you take this as the basis for your Identity foundation you'll end up with something like this:

    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);
    }
    
    0 讨论(0)
提交回复
热议问题