在 ASP.NET MVC 5 标识 2.0 中使用角色



对于我的一生,我不知道如何简单地向我的MVC 5应用程序添加角色。 这在 MVC 4 中是如此轻而易举。

桌子开箱即用,AspNetRoles,具有 ID 和名称("管理员"、"用户"等)AspNetUsers,具有 ID 和其他用户字段AspNetUserRoles- 此表具有映射到上述表的用户 ID 和角色 ID。

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

这是我尝试过的:

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
}

这将抛出错误:

"指数超出范围。必须为非负数且小于大小 的收藏。

有没有一种简单的方法可以获取当前登录用户的角色? 我已经看到了使用角色管理器的参考资料,但我无法使其工作。 我相信那是为了身份1.0

谢谢

错误告诉您userRole为空,因为即使索引为 0,也不会"小于集合的大小"。这意味着,有问题的用户不属于任何角色。

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

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

你可以为此使用RoleManager,但是当你可以直接利用上下文时,我发现这是矫枉过正的。

然后:

UserManager.AddToRole(userId, "Admin");

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

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

我也有类似的问题。使用 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>

相关内容

  • 没有找到相关文章

最新更新