对于我的一生,我不知道如何简单地向我的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>