private static void CheckAddRoles(IHostingEnvironment env, IServiceProvider services) { var pathRolesData = Path.GetFullPath(Path.Combine(env.WebRootPath, SeedDataDir, RolesFilename)); var context = services.GetRequiredService <ExtraAuthorizeDbContext>(); var extraService = new SetupExtraAuthUsers(context); var lines = File.ReadAllLines(pathRolesData); foreach (var line in lines) { var colonIndex = line.IndexOf(':'); var roleName = line.Substring(0, colonIndex); var permissions = line.Substring(colonIndex + 1).Split(',') .Select(x => Enum.Parse(typeof(Permissions), x.Trim(), true)) .Cast <Permissions>().ToList(); extraService.CheckAddNewRole(roleName, roleName, permissions); } context.SaveChanges(); }
/// <summary> /// This ensures there is a SuperAdmin user in the system. /// It gets the SuperAdmin's email and password from the "SuperAdmin" section of the appsettings.json file /// NOTE: fro security reasons I only allows one user with the RoleName of <see cref="SuperAdminRoleName"/> /// </summary> /// <param name="serviceProvider"></param> /// <returns></returns> public static async Task CheckAddSuperAdminAsync(this IServiceProvider serviceProvider) { using (var scope = serviceProvider.CreateScope()) { var services = scope.ServiceProvider; var extraContext = services.GetRequiredService <ExtraAuthorizeDbContext>(); if (extraContext.UserToRoles.Any(x => x.RoleName == SuperAdminRoleName)) { //For security reasons there can only be one user with the SuperAdminRoleName return; } var userManager = services.GetRequiredService <UserManager <IdentityUser> >(); var config = services.GetRequiredService <IConfiguration>(); var superSection = config.GetSection("SuperAdmin"); if (superSection == null) { return; } var userEmail = superSection["Email"]; var userPassword = superSection["Password"]; var superUser = await userManager.CheckAddNewUserAsync(userEmail, userPassword); using (var context = services.GetRequiredService <ExtraAuthorizeDbContext>()) { var extraService = new SetupExtraAuthUsers(context); extraService.CheckAddNewRole(SuperAdminRoleName, "SuperAdmin Role", new List <Permissions> { Permissions.AccessAll }); extraService.CheckAddRoleToUser(superUser.Id, SuperAdminRoleName); context.SaveChanges(); } } }