繁体   English   中英

在Asp.Net Mvc 6中创建一个管理员超级用户

[英]Create an Admin Super User in Asp.Net Mvc 6

我正在尝试编写代码,以从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");
}

不知道我是否正确,但是如果您想以管理员身份创建用户,则可以执行以下操作。

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");
    }
}

您能指出问题到底在哪里吗?

首先,请检查[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");

从//接下来,我创建一个管理员超级用户,当我使用命令行执行该操作时,该用户将维护LMS网站面板:dnx web; 我的回答是“访问被拒绝”。 看来我不能错过一些密码验证。

当我创建一个新项目时,此代码有效,但我不想使用具有长ID的userId。var user = await UserManager.FindByIdAsync(“ 7bd66984-a290-4442-a9f8-5659e01b0c06”); 因此,我希望将我的第一个管理员分配给Admin超级用户,以便更改以分配其他用户角色。

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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM