我正在尝试从Asp.Net Mvc 6中的Startup.cs创建默认管理超级用户的代码,我可以只添加所有用户角色,但我不能自动将管理员用户分配到AspNetUsers表中。有些专家可以帮助我解决问题,如下面的嵌入式代码:
private async Task CreateRoles(ApplicationDbContext context, IServiceProvider serviceProvider)
{
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
// First, Creating User role as each role in User Manager
List<IdentityRole> roles = new List<IdentityRole>();
roles.Add(new IdentityRole {Name = "Admin", NormalizedName = "ADMINISTRATOR"});
roles.Add(new IdentityRole { Name = "Member", NormalizedName = "MEMBER" });
roles.Add(new IdentityRole { Name = "Librarian", NormalizedName = "LIBRARIAN" });
roles.Add(new IdentityRole { Name = "Borrower", NormalizedName = "BORROWER" });
roles.Add(new IdentityRole { Name = "Reader", NormalizedName = "READER" });
//Then, the machine added Default User as the Admin user role
foreach (var role in roles)
{
var roleExit = await roleManager.RoleExistsAsync(role.Name);
if (!roleExit)
{
context.Roles.Add(role);
context.SaveChanges();
}
}
//Next, I create an Admin Super User who will maintain the LMS website panel
var userAdmin = new ApplicationUser()
{
UserName = "TrueMan",
Email = "alpha@lms.com",
};
string userPWD = "Alpha@Mega";
var chkUser = userManager.AddPasswordAsync(userAdmin, userPWD);
if (chkUser.IsFaulted)
{
await roleManager.CreateAsync(new IdentityRole { Name = "Admin", NormalizedName = "ADMINISTRATOR" });
}
userAdmin = await userManager.FindByNameAsync("TrueMan");
await userManager.AddToRoleAsync(userAdmin, "Admin");
//await userManager.AddToRoleAsync(user, "Admin");
}
答案 0 :(得分:0)
不确定我是否帮助您,但如果您想以管理员角色创建用户,我会执行以下操作。
private async Task CreateRoles(ApplicationDbContext context, IServiceProvider serviceProvider)
{
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
// First, Creating User role as each role in User Manager
List<IdentityRole> roles = new List<IdentityRole>();
roles.Add(new IdentityRole {Name = "Admin", NormalizedName = "ADMINISTRATOR"});
roles.Add(new IdentityRole { Name = "Member", NormalizedName = "MEMBER" });
roles.Add(new IdentityRole { Name = "Librarian", NormalizedName = "LIBRARIAN" });
roles.Add(new IdentityRole { Name = "Borrower", NormalizedName = "BORROWER" });
roles.Add(new IdentityRole { Name = "Reader", NormalizedName = "READER" });
//Then, the machine added Default User as the Admin user role
foreach (var role in roles)
{
var roleExit = await roleManager.RoleExistsAsync(role.Name);
if (!roleExit)
{
context.Roles.Add(role);
context.SaveChanges();
}
}
await CreateUser(context, userManager)
}
}
private async Task CreateUser(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
{
var adminUser = await userManager.FindByEmailAsync("alpha@lms.com");
if (adminUser != null)
{
if (!(await userManager.IsInRoleAsync(adminUser.Id, "Admin")))
userManager.AddToRoleAsync(adminUser.UserName, "Admin");
}
else
{
var newAdmin = new ApplicationUser()
{
UserName = "TrueMan",
Email = "alpha@lms.com",
};
await userManager.CreateAsync(newAdmin, "Alpha@Mega");
await userManager.AddToRoleAsync(newAdmin.userName, "Admin");
}
}
请指出你的问题究竟在哪里?
答案 1 :(得分:0)
首先请检查[AspNetRoles]表是否包含admin的重复项并删除它们。我认为这一行应该是:
var roleExit = await roleManager.RoleExistsAsync(role.NormalizedName);
然后:
string userPWD = "Alpha@1Mega";
await userManager.CreateAsync(userAdmin, userPWD);
var user = await userManager.FindByNameAsync("TrueMan");
if(!(await userManager.IsInRoleAsync(user, "Admin")))
await userManager.AddToRoleAsync(user, "Admin");
答案 2 :(得分:0)
来自//接下来,当我使用命令行执行时,我创建了一个管理超级用户,他将维护LMS网站面板:dnx web;我的回复是&#34;访问被拒绝&#34;。似乎我不能错过一些密码验证。
答案 3 :(得分:0)
此代码在我创建新项目时有效,但我不希望userId具有long id var user = await UserManager.FindByIdAsync(“7bd66984-a290-4442-a9f8-5659e01b0c06”);因此,我希望我的第一个管理员分配给管理员超级用户,以便更改为分配其他用户角色。
private async Task CreateRoles(ApplicationDbContext context, IServiceProvider serviceProvider)
{
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
// First, Creating User role as each role in User Manager
List<IdentityRole> roles = new List<IdentityRole>();
roles.Add(new IdentityRole {Name = "Admin", NormalizedName = "ADMINISTRATOR"});
roles.Add(new IdentityRole { Name = "Member", NormalizedName = "MEMBER" });
roles.Add(new IdentityRole { Name = "Librarian", NormalizedName = "LIBRARIAN" });
roles.Add(new IdentityRole { Name = "Borrower", NormalizedName = "BORROWER" });
roles.Add(new IdentityRole { Name = "Reader", NormalizedName = "READER" });
//Then, the machine added Default User as the Admin user role
foreach (var role in roles)
{
var roleExit = await roleManager.RoleExistsAsync(role.Name);
if (!roleExit)
{
context.Roles.Add(role);
context.SaveChanges();
}
}
// var user = await UserManager.FindByIdAsync("7bd66984-a290-4442-a9f8-5659e01b0c06");
// await UserManager.AddToRoleAsync(user, "Admin");
}