【发布时间】:2016-02-11 01:24:06
【问题描述】:
我已安装 asp.net 身份示例 https://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples 并尝试使用用户“Sadmin@example.com”创建一个新角色“SAdmin”。用户已创建,但“Sadmin”获得与“Admin”相同的角色
我已将 IdentityConfig.cs 修改为
//Create User=Admin@Admin.com with password=Admin@123456 in the Admin role
public static void InitializeIdentityForEF(ApplicationDbContext db) {
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "admin@example.com";
const string password = "Admin@123456";
const string roleName = "Admin";
const string Sname = "Sadmin@example.com";
const string Spassword = "SAdmin@123456";
const string SroleName = "SAdmin";
//Create Super if it does not exist
var Srole = roleManager.FindByName(SroleName);
if (Srole == null)
{
Srole = new IdentityRole(roleName);
var roleresult = roleManager.Create(Srole);
}
var Suser = userManager.FindByName(Sname);
if (Suser == null)
{
Suser = new ApplicationUser { UserName = Sname, Email = Sname };
var result = userManager.Create(Suser, Spassword);
result = userManager.SetLockoutEnabled(Suser.Id, false);
}
// Add Suser to Role Admin if not already added
var SrolesForUser = userManager.GetRoles(Suser.Id);
if (!SrolesForUser.Contains(Srole.Name))
{
var result = userManager.AddToRole(Suser.Id, Srole.Name);
}
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null) {
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
var user = userManager.FindByName(name);
if (user == null) {
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name)) {
var result = userManager.AddToRole(user.Id, role.Name);
}
}
【问题讨论】:
-
你是什么意思得到相同的角色?您可以检查数据库内容并查看每个用户具有哪些角色。
-
当我查看数据库时,用户“Sname”被添加到角色“Admin”,而不是角色“SAdmin”。
-
您能检查一下您的角色表并确保定义了 2 个角色吗?
-
我在 AspNetRoles 中只有一个角色(“管理员”)。怎么了?
-
在 var Srole = roleManager.FindByName(SroleName) 中忘记了“S”;谢谢!
标签: c# asp.net asp.net-mvc-5 asp.net-identity-2