对于我的生活,我无法弄清楚如何简单地将角色添加到我的MVC 5应用程序中。在MVC 4中这是一件轻而易举的事。
表格是开箱即用的,
AspNetRoles
,其中包含ID和姓名("管理员","用户"等等...)
AspNetUsers
,其中包含Id和其他用户字段
AspNetUserRoles
- 此表有一个UserId和RoleId,映射到上面的表。
我希望能够检查登录用户是否拥有" admin"角色或只是"用户"作用。
以下是我的尝试:
if (User.IsInRole("Admin"))
{
//do something
}
价值总是假的。
我也尝试过:
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var userRole = UserManager.GetRoles(user.GetUserId());
if (userRole[0] == "Admin")
{
// do something
}
抛出错误:
&#34;指数超出范围。必须是非负的且小于大小 集合。&#34;
是否有一种简单的方法可以为当前登录的用户获取角色?我见过使用Role Manager的参考资料,但我一直无法使用它。我相信那是为了身份1.0
由于
答案 0 :(得分:3)
错误告诉您userRole
为空,因为即使索引为0,也不会小于集合的大小&#34;。这意味着,有问题的用户不属于任何角色。
这种方法与以往没有太大的不同。首先,该角色必须存在,并且用户需要与该角色相关联。因此,第一步是填充您的角色:
db.Roles.Add(new Role { Name = "Admin" });
你可以使用RoleManager
来解决这个问题,但是当你可以直接利用上下文时,我发现它是过度的。
然后:
UserManager.AddToRole(userId, "Admin");
根本就是它的全部内容。如果您愿意,可以覆盖Seed
中的Migrations\Configuration.cs
以自动将一些用户/角色植入数据库。对于角色,这看起来像:
context.Roles.AddOrUpdate(
r => r.Name,
new Role { Name = "Admin" },
...
);
答案 1 :(得分:0)
我有类似的问题。使用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>