示例#1
0
        public Task <TUser> FindAsync(UserLoginInfo login)
        {
            if (login == null)
            {
                throw new ArgumentNullException("parameter not valid for find_async operation");
            }

            int?userID = new Criteria <BOIdentityUserLogin>(IdentityUserLoginRepository)
                         .Add(Expression.Eq("LoginProvider", login.LoginProvider))
                         .Add(Expression.Eq("ProviderKey", login.ProviderKey))
                         .Add(new Projection("UserId"))
                         .List <IList <object> >()[0].Select((x) => (int?)x)
                         .SingleOrDefault();

            TUser user = null;

            if (userID.HasValue)
            {
                var identityUser = new BOIdentityUser();
                identityUser.Repository = IdentityUserRepository;
                identityUser.Init((int)userID);
                user = LoadData(identityUser);
            }


            return(Task.FromResult(user));
        }
示例#2
0
        public async Task <IHttpActionResult> DeleteIdentityUser(Int32 id)
        {
            var result = Task.Factory.StartNew(() =>
            {
                IUnitOfWork uow = new UnitOfWorkImp(new IRepositoryConnection[] { IdentityUserRepository });
                var bo          = new BOIdentityUser();
                bo.Repository   = IdentityUserRepository;
                bo.Init(id);

                uow.Delete(bo);

                string err;
                if (!uow.Commit(out err))
                {
                    var resp = new HttpResponseMessage(HttpStatusCode.BadRequest)
                    {
                        Content = new StringContent(err)
                    };
                    throw new HttpResponseException(resp);
                }
                return(true);
            });
            await result;

            if (!result.Result)
            {
                return(NotFound());
            }

            return(Ok(result.Result));
        }
示例#3
0
        public Task DeleteAsync(TUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            var boIdentityUser = new BOIdentityUser();

            boIdentityUser.Repository = IdentityUserRepository;
            boIdentityUser.Init(user.Id);
            boIdentityUser.Delete();

            /*remove possible stale object*/
            var cachedObject = _identityUsersCache.SingleOrDefault(x => x.UserId == boIdentityUser.UserId);

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

            return(Task.FromResult(true));
        }
示例#4
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));
        }