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

时间:2014-09-09 10:26:45

标签: c# asp.net-mvc-5 claims-based-identity asp.net-roles

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

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

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

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:6)

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

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

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

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

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

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