Фильтрация пользователей jhipster по роли в UserService - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь отфильтровать пользователей в jhipster по определенной роли.Пришел бы этот фильтр в класс UserService, по сути, в метод getNonAdminUsers?По умолчанию UserService вызывает getAllManagedUsers, который в основном возвращает каждого пользователя, кроме меня.Это нормально, но моя цель - вернуть всех, кто не является пользователем ROLE_ADMIN.вот существующее «ядро».

@Transactional(readOnly = true) public Page<UserDTO> getAllManagedUsers(Pageable pageable) { return userRepository.findAllByLoginNot(pageable,Constants.ANONYMOUS_USER).map(UserDTO::new); }

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Это может быть реализовано с использованием спецификации (org.springframework.data.jpa.domain.Specification);

Сначала добавьте новую сигнатуру метода в свой репозиторий пользователя

Page<User> findAll(Specification<User> where, Pageable pageable);

Затем в васUserService добавить спецификацию:

static Specification<User> isNotAdmin(Authority role) {
    return (obj, cq, cb) -> cb.isNotMember(role, obj.get("authorities"));
}

Затем измените свой метод для фильтрации по роли, которую вы хотите исключить:

@Transactional(readOnly = true)
public Page<UserDTO> getAllManagedUsers(Pageable pageable) {
    Authority admin = authorityRepository.findById(AuthoritiesConstants.ADMIN).get();
    return userRepository.findAll(Specification.where(isNotAdmin(admin)), pageable).map(UserDTO::new);
}
0 голосов
/ 07 января 2019

Не думаю, что это лучший метод

@Transactional(readOnly = true)
public Page<UserDTO> getAllManagedUsers(Pageable pageable) {
    Optional<User> userOnline = getUserWithAuthoritiesByLogin(SecurityUtils.getCurrentUserLogin().get());
    Page<UserDTO> userRepo = userRepository.findAllByLoginNot(pageable, Constants.ANONYMOUS_USER).map(UserDTO::new);
    if(userOnline.get().getId() < 4)
    {
        return userRepo;
    }else {
        List<UserDTO> userList = new ArrayList<UserDTO>();
        userList.addAll(userRepo.getContent());
        Predicate<UserDTO> predicate = p-> p.getId() < 4;
        userList.removeIf(predicate);
        return new PageImpl<UserDTO>(userList, new PageRequest(pageable.getPageNumber(), pageable.getPageSize()),userList.size());

    }       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...