public class StartupWorker: BackgroundService { private readonly IServiceProvider _serviceProvider; private static readonly string[] Roles = { "Admin", "Manager", "Member" }; public StartupWorker(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await CreateRoles(); await CreateAdmin(); } private async Task CreateRoles() { using var serviceScope = _serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope(); var roleManager = serviceScope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>(); foreach (var role in Roles) { if (!await roleManager.RoleExistsAsync(role)) { await roleManager.CreateAsync(new IdentityRole(role)); } } } private async Task CreateAdmin() { using var serviceScope = _serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope(); var userManager = serviceScope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); var user = await userManager.FindByNameAsync("admin"); if (user == null) { var identity = new ApplicationUser("admin") { FirstName = "Admin", LastName = "" }; var password = "12345"; await userManager.CreateAsync(identity, password); await userManager.AddToRoleAsync(identity, "Admin"); } } }
References
https://learn.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-7.0