Ejemplo n.º 1
0
        public Task UpdateAsync(TUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("null parameter for update_async operation");
            }

            var updatedUser = new BOIdentityUser();

            updatedUser.Repository = IdentityUserRepository;
            updatedUser.IdentityUserClaimRepository = IdentityUserClaimRepository;
            updatedUser.IdentityUserLoginRepository = IdentityUserLoginRepository;
            updatedUser.IdentityUserRoleRepository  = IdentityUserRoleRepository;

            updatedUser.Init(user.Id);
            updatedUser.Username             = user.UserName;
            updatedUser.PasswordHash         = user.PasswordHash;
            updatedUser.SecurityStamp        = user.SecurityStamp;
            updatedUser.Email                = user.Email;
            updatedUser.PhoneNumber          = user.PhoneNumber;
            updatedUser.EmailConfirmed       = user.IsEmailConfirmed;
            updatedUser.PhoneNumberConfirmed = user.IsPhoneNumberConfirmed;

            updatedUser.AccessFailedCount = user.AccessFailedCount;
            updatedUser.LockoutEnabled    = user.LockoutEnabled;

            updatedUser.LockoutEndDateUtc = (user.LockoutEndDate.UtcDateTime != DateTime.MinValue ? user.LockoutEndDate.UtcDateTime : updatedUser.LockoutEndDateUtc);
            updatedUser.TwoFactorEnabled  = user.TwoFactorAuthEnabled;
            updatedUser.Update();

            updatedUser.DeleteAllIdentityUserClaim();
            updatedUser.DeleteAllIdentityUserLogin();
            updatedUser.DeleteAllIdentityUserRole();

            foreach (var role in user.Roles)
            {
                BOIdentityRole identityRole = new Criteria <BOIdentityRole>(IdentityRoleRepository).Add(Expression.Eq("Name", role))
                                              .SingleOrDefault <BOIdentityRole>();

                if (identityRole != null)
                {
                    updatedUser.AddIdentityUserRole(new BOIdentityUserRole()
                    {
                        Repository = IdentityUserRoleRepository, RoleId = identityRole.Id
                    });
                }
            }

            foreach (var claim in user.Claims)
            {
                updatedUser.AddIdentityUserClaim(new BOIdentityUserClaim()
                {
                    Repository = IdentityUserClaimRepository, ClaimType = claim.ClaimType, ClaimValue = claim.ClaimValue
                });
            }

            foreach (var login in user.Logins)
            {
                updatedUser.AddIdentityUserLogin(new BOIdentityUserLogin()
                {
                    Repository = IdentityUserLoginRepository, LoginProvider = login.LoginProvider, ProviderKey = login.ProviderKey
                });
            }


            /*remove possible stale object, an updated one will get picked up in findbyidasync method when required*/
            var cachedObject = _identityUsersCache.SingleOrDefault(x => x.UserId == updatedUser.UserId);

            if (cachedObject != null)
            {
                _identityUsersCache.Remove(cachedObject);
            }
            _identityUsersCache.Add(updatedUser);

            return(Task.FromResult(true));
        }