public static void GetRoleAndSubRoleIds(UserEntity userEntity, List<int> subRoleIds)
		{
			List<Role> subRoles = new List<Role>();
			GetRoleAndSubRoles(userEntity, subRoles);

			subRoleIds.AddRange(subRoles.Select(subRole => subRole.Id));
		}
		public UserEntity Create(UserEntity user)
		{
			using (IDatabaseProvider provider = ProviderFactory.GetProvider(_connectionStringName))
			{
				EncryptPassword(user);
				CheckDuplicateUser(user);

				return provider.Insert<UserEntity>(user);
			}
		}
		public static void GetRoleAndSubRoles(UserEntity userEntity, List<Role> subRoles)
		{
			//Get the rootparent entity
			RoleEntity entity = GenericRepository.GetItemTopById<RoleEntity>(AuthAdminDatabase, RolesCollection,
				userEntity.Roles[0]);

			subRoles.Add(entity.TranslateToResponse());

			AddSubRoles(subRoles, entity);
		}
		private static void CreateUser(int id, string username, string email, string password, string language, List<int> roles = null, List<string> permissions = null)
		{
			UserRepository repository = GetUserRepository();
			UserEntity entity = new UserEntity();

			entity.UserName = username;
			entity.PasswordHash = password;
			entity.Language = language;
			entity.Active = true;
			entity.Roles = roles;
			entity.Permissions = permissions;
			entity.Language = language;

			repository.Create(entity);
		}
		public static UserEntity GetUserForInsert()
		{
			string hash;
			string salt;
			new SaltedHash().GetHashAndSaltString(HTTPClientHelpers.Password, out hash, out salt);
			UserEntity entity = new UserEntity()
			{
				Language = "",
				ModifiedDate = DateTime.UtcNow,
				PasswordHash = hash,
				Salt = salt,
				UserName = HTTPClientHelpers.AdminUserName
			};

			entity.Active = true;
			entity.Language = "en-US";
			entity.Permissions.Add("SomePermission");
			entity.Roles.Add(1);

			return entity;
		}
		private static void EncryptPassword(UserEntity user)
		{
			string hash;
			string salt;
			new SSAuthInterfaces.SaltedHash().GetHashAndSaltString(user.PasswordHash, out hash, out salt);

			user.PasswordHash = hash;
			user.Salt = salt;
		}
		private UserEntity UpdateProperties(UserEntity user, UserEntity userToUpdate)
		{
			userToUpdate.Active = user.Active;
			userToUpdate.Language = user.Language;
			userToUpdate.Meta = user.Meta;
			userToUpdate.ModifiedDate = DateTime.UtcNow;
			userToUpdate.DomainPermissions = user.DomainPermissions;
			userToUpdate.Permissions = user.Permissions;
			userToUpdate.Roles = user.Roles;

			return userToUpdate;
		}
		private void CheckDuplicateUser(UserEntity user)
		{
			UserEntity duplicate = null;
			try
			{
				duplicate = Read(user.UserName);
			}
			catch { }

			if (duplicate != null)
				throw new DataAccessException("Duplicate User detected"); //  This should not happen seeing that validation should check.
		}
		public UserEntity Update(UserEntity user)
		{
			using (IDatabaseProvider provider = ProviderFactory.GetProvider(_connectionStringName))
			{
				UserEntity userToUpdate = Read(user.UserName);
				if (userToUpdate == null)
					throw new DataAccessException("User not found"); //  This should not happen seeing that validation should check.

				userToUpdate = UpdateProperties(user, userToUpdate);

				provider.Update<UserEntity>(userToUpdate);

				return userToUpdate;
			}
		}
		private static SSAuthInterfaces.UserAuth TranslateToUserAuth(UserEntity userEntity)
		{
			SSAuthInterfaces.UserAuth userAuth = userEntity.TranslateTo<SSAuthInterfaces.UserAuth>();

			return userAuth;
		}
		private User TranslateToResponse(UserEntity entity)
		{
			User response = entity.TranslateTo<User>();

			return response;
		}