using System; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNet.Identity; using Microsoft.Data.Entity.SqlServer; using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.OptionsModel; namespace IdentitySample.Models { public static class SampleData { public static async Task InitializeIdentityDatabaseAsync(IServiceProvider serviceProvider) { using (var db = serviceProvider.GetService()) { var sqlServerDataStore = db.Configuration.DataStore as SqlServerDataStore; if (sqlServerDataStore != null) { if (await db.Database.EnsureCreatedAsync()) { await CreateAdminUser(serviceProvider); } } else { await CreateAdminUser(serviceProvider); } } } /// /// Creates a store manager user who can manage the inventory. /// /// /// private static async Task CreateAdminUser(IServiceProvider serviceProvider) { var options = serviceProvider.GetService>().Options; const string adminRole = "Administrator"; var userManager = serviceProvider.GetService>(); var roleManager = serviceProvider.GetService>(); if (!await roleManager.RoleExistsAsync(adminRole)) { await roleManager.CreateAsync(new IdentityRole(adminRole)); } var user = await userManager.FindByNameAsync(options.DefaultAdminUserName); if (user == null) { user = new ApplicationUser { UserName = options.DefaultAdminUserName }; await userManager.CreateAsync(user, options.DefaultAdminPassword); await userManager.AddToRoleAsync(user, adminRole); await userManager.AddClaimAsync(user, new Claim("ManageStore", "Allowed")); } } } }