| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package com.izouma.awesomeAdmin.web;
- import com.izouma.awesomeAdmin.domain.BaseEntity;
- import com.izouma.awesomeAdmin.domain.Menu;
- import com.izouma.awesomeAdmin.enums.AuthorityName;
- import com.izouma.awesomeAdmin.repo.MenuRepo;
- import com.izouma.awesomeAdmin.security.Authority;
- import lombok.AllArgsConstructor;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.data.jpa.domain.Specification;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.security.core.Authentication;
- import org.springframework.security.core.GrantedAuthority;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.web.bind.annotation.*;
- import javax.persistence.criteria.Predicate;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- @RestController
- @RequestMapping("/menu")
- @AllArgsConstructor
- public class MenuController extends BaseController {
- private final MenuRepo menuRepo;
- @GetMapping("/userMenu")
- public List<Menu> userMenu() {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- List<Menu> menuList = menuRepo.authorityMenus(authentication.getAuthorities()
- .stream()
- .map(GrantedAuthority::getAuthority)
- .collect(Collectors.toList()))
- .stream()
- .map(Menu::from)
- .collect(Collectors.toList());
- List<Menu> root = new ArrayList<>();
- for (Menu menu : menuList) {
- if (menu.getRoot()) {
- root.add(menu);
- } else {
- Menu parent = menuList.stream().filter(m -> m.getId().equals(menu.getParent())).findAny().orElse(null);
- if (parent != null) {
- if (parent.getChildren() == null) {
- parent.setChildren(new ArrayList<>());
- }
- parent.getChildren().add(menu);
- }
- }
- }
- sortMenu(root);
- return root;
- }
- @GetMapping("/authority/{name}/get")
- public List<Long> getAuthorityMenus(@PathVariable String name) {
- return menuRepo.findAll((Specification<Menu>) (root, criteriaQuery, criteriaBuilder) -> {
- List<Predicate> predicates = new ArrayList<>();
- predicates.add(criteriaBuilder.isMember(Authority.get(AuthorityName.valueOf(name)), root.get("authorities")));
- return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
- }).stream().map(BaseEntity::getId).collect(Collectors.toList());
- }
- @PostMapping("/authority/{name}/save")
- public void saveAuthorityMenus(@PathVariable String name, @RequestBody List<Long> ids) {
- menuRepo.clearAuthority(name);
- ids.stream().parallel().forEach(id -> menuRepo.saveAuthority(name, id));
- }
- @PreAuthorize("hasRole('ADMIN')")
- @GetMapping("/all")
- public List<Menu> all(String category) {
- List<Menu> menuList = menuRepo.findAll((Specification<Menu>) (root, criteriaQuery, criteriaBuilder) -> {
- List<Predicate> predicates = new ArrayList<>();
- predicates.add(criteriaBuilder.equal(root.get("root"), true));
- if (StringUtils.isNotBlank(category)) {
- predicates.add(criteriaBuilder.equal(root.get("category"), category));
- }
- return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
- });
- sortMenu(menuList);
- return menuList;
- }
- @PreAuthorize("hasRole('ADMIN')")
- @PostMapping("/save")
- public Menu save(@RequestBody Menu menu) {
- if (menu.getSort() == null) {
- menu.setSort(menuRepo.nextSort());
- }
- menuRepo.save(menu);
- return menu;
- }
- @PreAuthorize("hasRole('ADMIN')")
- @GetMapping("/groupByCategory")
- public Map<String, List<Menu>> groupByCategory() {
- return menuRepo.findAll().stream()
- .filter(menu -> menu.getCategory() != null)
- .collect(Collectors.groupingBy(Menu::getCategory));
- }
- @PreAuthorize("hasRole('ADMIN')")
- @GetMapping("/categories")
- public List<String> categories() {
- return menuRepo.categories().stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
- }
- private void sortMenu(List<Menu> menus) {
- menus.sort(Comparator.comparingInt(Menu::getSort));
- for (Menu menu : menus) {
- if (menu.getChildren() != null) {
- sortMenu(menu.getChildren());
- }
- }
- }
- }
|