【问题标题】:Use Roles in ASP.NET MVC 5 Identity 2.0在 ASP.NET MVC 5 Identity 2.0 中使用角色
【发布时间】:2016-10-24 21:05:09
【问题描述】:

在我的一生中,我无法弄清楚如何简单地将角色添加到我的 MVC 5 应用程序中。这在 MVC 4 中真是轻而易举。

桌子开箱即用, AspNetRoles,具有 Id 和名称(“Admin”、“User”等...) AspNetUsers,它有一个 Id 和其他用户字段 AspNetUserRoles - 这个表有一个 UserId 和 RoleId,映射到上面的表。

我希望能够检查登录用户是否具有“管理员”角色或只是“用户”角色。

这是我尝试过的:

if (User.IsInRole("Admin"))
{
 //do something
}

该值总是返回 false。

我也试过了:

var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var userRole = UserManager.GetRoles(user.GetUserId());
if (userRole[0] == "Admin")
    {
     // do something
    }

这会引发错误:

"索引超出范围。必须为非负数且小于大小 集合。”

有没有简单的方法可以获取当前登录用户的角色?我已经看到有关使用角色管理器的参考,但我无法让它发挥作用。我相信那是针对 Identity 1.0

谢谢

【问题讨论】:

标签: asp.net asp.net-mvc-5 asp.net-identity claims-based-identity asp.net-identity-2


【解决方案1】:

错误告诉您userRole 为空,因为即使索引为 0,也不是“小于集合的大小”。这意味着,相关用户不属于任何角色。

这方面的方法实际上与以往没有太大不同。首先,该角色必须存在,并且用户需要与该角色相关联。因此,第一步是填充您的角色:

db.Roles.Add(new Role { Name = "Admin" });

您可以为此使用RoleManager,但是当您可以直接使用上下文时,我发现这样做有点过头了。

然后:

UserManager.AddToRole(userId, "Admin");

这就是它的全部内容。如果您愿意,您可以覆盖Migrations\Configuration.cs 中的Seed 以自动将一些用户/角色播种到数据库中。对于角色,这看起来像:

context.Roles.AddOrUpdate(
    r => r.Name,
    new Role { Name = "Admin" },
    ...
);

【讨论】:

  • 是的,我已经看到了。我有一张空桌子。我的问题是你如何检查你的角色?我有 if(User.IsInRole("Admin") 这总是错误的。谢谢
  • qq: 假设本地 sqlserver 和 localdb 并且你打开身份 db,你看到你有任何数据存在吗?我遇到了一个问题,我试图通过创建用户来为数据库播种,我没有检查总是出错的 IdentityResult,因此我的数据库很容易。
【解决方案2】:

我遇到了类似的问题。使用 MySQL,我在我的配置文件中有这个:

<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

改为:

<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 2013-11-10
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多