【问题标题】:Create an Admin Super User in Asp.Net Mvc 6在 Asp.Net Mvc 6 中创建管理员超级用户
【发布时间】:2016-07-02 01:59:37
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net sql-server asp.net-core-mvc


    【解决方案1】:

    此代码在我创建新项目时有效,但我不想让 userId 具有长 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");
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          不确定我是否正确,但如果您想以管理员角色创建用户,我会执行以下操作。

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

          您能否具体说明您的问题出在哪里?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-12
            • 2016-12-23
            • 2023-03-15
            • 2020-07-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-04
            相关资源
            最近更新 更多