Ejemplo n.º 1
0
        /// <summary>
        /// Adds username to given roles
        /// </summary>
        /// <param name="username"></param>
        /// <param name="roleNames"></param>
        public override void AddUserToRoles(string username, IEnumerable <string> roleNames)
        {
            using (var ctx = _episerverDbContextFactory.CreateContext())
            {
                var rolesList = roleNames.ToList();
                var roles     = ctx.ExtendedRoles.Where(x => rolesList.Contains(x.RoleName)).ToList();
                var user      = ctx.TblSynchedUser
                                .Include(p => p.ExtendedUserRoles)
                                .ThenInclude(p => p.ExtendedRole)
                                .FirstOrDefault(u => u.UserName == username);

                if (user == null)
                {
                    return;
                }

                foreach (var role in roles)
                {
                    if (user.ExtendedUserRoles.Any(x => x.ExtendedRoleId == role.Id))
                    {
                        continue;
                    }

                    user.ExtendedUserRoles.Add(new ExtendedRoleSynchedUser {
                        ExtendedRoleId = role.Id, SynchedUserId = user.PkId
                    });
                }

                ctx.TblSynchedUser.Update(user);
                ctx.SaveChanges();
            }
        }
        /// <summary>
        /// Finds part of user
        /// </summary>
        /// <param name="partOfUser"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public async Task <PagedNotificationUserResult> FindAsync(string partOfUser, int pageIndex, int pageSize)
        {
            using (var ctx = _episerverDbContextFactory.CreateContext())
            {
                pageIndex = pageIndex < 1 ? 1 : pageIndex;
                var count   = ctx.TblSynchedUser.Count(u => u.UserName.Contains(partOfUser));
                var results = await ctx.TblSynchedUser.Where(u => u.UserName.Contains(partOfUser))
                              .Skip((pageIndex - 1) * pageSize)
                              .Take(pageSize)
                              .ToListAsync();

                return(new PagedNotificationUserResult(results.Select(u => new NotificationUser(u.UserName)), count));
            }
        }
        /// <summary>
        /// Sets last login, created date, and assigns manual role claims
        /// </summary>
        /// <param name="identity"></param>
        /// <param name="loginDateUtc"></param>
        /// <returns></returns>
        public async Task SetExtendedRolesAsync(ClaimsIdentity identity, DateTime?loginDateUtc = null)
        {
            if (identity == null || string.IsNullOrWhiteSpace(identity.Name))
            {
                throw new ArgumentNullException(nameof(identity));
            }

            using (var db = _extendedRoleDbContextFactory.CreateContext())
            {
                var user = await db.TblSynchedUser
                           .Include(u => u.ExtendedUser)
                           .Include(u => u.ExtendedUserRoles)
                           .ThenInclude(u => u.ExtendedRole)
                           .FirstOrDefaultAsync(u => u.UserName == identity.Name)
                           .ConfigureAwait(false);

                var time = loginDateUtc?.ToUniversalTime() ?? DateTime.UtcNow;
                if (user == null)
                {
                    return;
                }
                if (user.ExtendedUser == null)
                {
                    user.ExtendedUser = new ExtendedSynchedUser
                    {
                        CreatedUtcDate   = time,
                        LastLoginUtcDate = time
                    };
                }
                else
                {
                    user.ExtendedUser.LastLoginUtcDate = time;
                }

                db.TblSynchedUser.Update(user);
                await db.SaveChangesAsync().ConfigureAwait(false);

                foreach (var role in user.ExtendedUserRoles)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, role.ExtendedRole.RoleName));
                }
            }

            return;
        }