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();
        }
Пример #2
0
        /// <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();
                }
            }
        }