Example #1
0
        public Task CreateAsync(TUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            var newUser = new BOIdentityUser();

            newUser.Repository           = IdentityUserRepository;
            newUser.Username             = user.UserName;
            newUser.PasswordHash         = user.PasswordHash;
            newUser.SecurityStamp        = user.SecurityStamp;
            newUser.Email                = user.Email;
            newUser.PhoneNumber          = user.PhoneNumber;
            newUser.EmailConfirmed       = user.IsEmailConfirmed;
            newUser.PhoneNumberConfirmed = user.IsPhoneNumberConfirmed;
            newUser.AccessFailedCount    = user.AccessFailedCount;
            newUser.LockoutEnabled       = user.LockoutEnabled;
            newUser.LockoutEndDateUtc    = (user.LockoutEndDate.UtcDateTime != DateTime.MinValue ? user.LockoutEndDate.UtcDateTime : newUser.LockoutEndDateUtc);
            newUser.TwoFactorEnabled     = user.TwoFactorAuthEnabled;
            newUser.SaveNew();

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

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

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

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

            user.Id = (int)newUser.UserId;
            _identityUsersCache.Add(newUser);

            return(Task.FromResult(true));
        }
Example #2
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));
        }