c# - 在 Asp.Net Mvc 6 中创建管理员 super 用户

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

我正在尝试编写代码以从 Asp.Net Mvc 6 中的 Startup.cs 创建默认管理员 super 用户,我可以只添加所有用户角色,但我无法自动将管理员用户分配到 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");
    }
}

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

关于c# - 在 Asp.Net Mvc 6 中创建管理员 super 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031445/

相关文章:

asp.net - 从用户控件调用父级中的方法

来自相同正则表达式字符串的 C# 和 JavaScript 结果非常不同 - 如何使结果更一致?

c# - 在单独的线程中执行长时间操作是否安全?

.net - 如何将故障转移伙伴添加到 VB.NET 中的连接字符串

c# - asp.net mvc 5 t4 脚手架

C# : Check value stored inside string object is decimal or not

c# - 在 C# 中将 12 小时格式转换为 24 小时格式

c# - 正则表达式,检查特定长度范围之间的数字。 C#/ASP.NET

sql - SQL Server每隔特定时间间隔同步表数据

c# - 在添加之前检查项目是否存在于集合中的 native C# .NET 方法