public static void EnsureSeeded(this EllegiaContext context,
                                        IServiceProvider serviceProvider, IConfigurationReader configurationReader)
        {
            var users = configurationReader.Read();

            var userManager =
                serviceProvider.GetRequiredService <UserManager <EllegiaUser> >();
            var roleManager =
                serviceProvider.GetRequiredService <RoleManager <EllegiaRole> >();

            foreach (var user in users)
            {
                if (userManager.FindByNameAsync(user.Name).Result != null)
                {
                    continue;
                }

                if (roleManager.FindByNameAsync(user.Role).Result == null)
                {
                    var createRoleResult = roleManager.CreateAsync(new EllegiaRole {
                        Name = user.Role
                    }).Result;
                }

                var warehouse   = context.Warehouses.First();
                var ellegiaUser = new EllegiaUser(user.Name, user.Email, user.FullName, warehouse.Id);

                var createUserResult = userManager
                                       .CreateAsync(ellegiaUser, user.Password).Result;
                if (createUserResult.Succeeded)
                {
                    var addUserToRoleResult = userManager.AddToRoleAsync(ellegiaUser, user.Role).Result;
                }
            }

            var ellegiaUsers = userManager.GetUsersInRoleAsync(Roles.SupervisorNormalizedName).Result;

            if (!context.Shifts.Any())
            {
                context.Shifts.Add(new Shift("Смена #1", ellegiaUsers.First().Id));
                context.SaveChanges();
            }
        }
Пример #2
0
        private async Task <AuthenticationTicket> CreateTicketAsync(OpenIdConnectRequest request, EllegiaUser user)
        {
            var principal = await _signInManager.CreateUserPrincipalAsync(user);

            foreach (var claim in principal.Claims)
            {
                claim.SetDestinations(OpenIdConnectConstants.Destinations.AccessToken,
                                      OpenIdConnectConstants.Destinations.IdentityToken);
            }

            var ticket = new AuthenticationTicket(
                principal, new AuthenticationProperties(),
                OpenIdConnectServerDefaults.AuthenticationScheme);

            ticket.SetScopes(new[] {
                OpenIdConnectConstants.Scopes.OpenId,
                OpenIdConnectConstants.Scopes.Email,
                OpenIdConnectConstants.Scopes.Profile,
                OpenIddictConstants.Scopes.Roles
            }.Intersect(request.GetScopes()));

            return(ticket);
        }