From b19988672aab03b1fd31aa32f9a8c6da63922e63 Mon Sep 17 00:00:00 2001 From: qmstyle Date: Thu, 10 Apr 2025 16:28:20 +0800 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B44=E6=9C=8810=E6=97=A516:25:46?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam/controller/InitController.java | 13 ++ .../exam/controller/PermissionController.java | 73 ++++++++-- .../exam/controller/RoleController.java | 126 +++++++++++++++++- .../online/exam/entity/Permission.java | 5 +- src/main/resources/application.yml | 2 +- 5 files changed, 203 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/zhangmeng/online/exam/controller/InitController.java b/src/main/java/com/zhangmeng/online/exam/controller/InitController.java index 7e0fd67..479488a 100644 --- a/src/main/java/com/zhangmeng/online/exam/controller/InitController.java +++ b/src/main/java/com/zhangmeng/online/exam/controller/InitController.java @@ -963,4 +963,17 @@ public class InitController { } } + + + @RequestMapping("/test8") + public void test8() { + + List all = this.permissionDao.findAll(); + + Role role = this.roleDao.findById(1L).get(); + role.getPermissions().clear(); + role.getPermissions().addAll(all); + roleDao.save(role); + + } } diff --git a/src/main/java/com/zhangmeng/online/exam/controller/PermissionController.java b/src/main/java/com/zhangmeng/online/exam/controller/PermissionController.java index c9aaec3..fd390ce 100644 --- a/src/main/java/com/zhangmeng/online/exam/controller/PermissionController.java +++ b/src/main/java/com/zhangmeng/online/exam/controller/PermissionController.java @@ -34,27 +34,28 @@ public class PermissionController { /** * // 基本分页(无排序) * Pageable pageable = PageRequest.of(0, 10); - * + *

* // 分页+排序(单字段) * Pageable pageable = PageRequest.of(0, 10, Sort.Direction.DESC, "createTime"); - * + *

* // 分页+多字段排序 * Sort sort = Sort.by(Sort.Order.asc("age"), Sort.Order.desc("name")); * Pageable pageable = PageRequest.of(0, 10, sort); + * * @param pageNum * @param pageSize * @return */ @RequestMapping("/list") - public Result list(Integer pageNum, Integer pageSize,boolean isTop) { + public Result list(Integer pageNum, Integer pageSize, boolean isTop) { Pageable pageable = PageRequest.of(PageUtils.getPageNum(pageNum), pageSize, Sort.Direction.DESC, "addTime"); Page all; - if (isTop){ + if (isTop) { Specification spec = isDescriptionNull(); // 仅查询description为null的情况 all = permissionDao.findAll(spec, pageable); - }else { + } else { all = permissionDao.findAll(pageable); } @@ -67,7 +68,7 @@ public class PermissionController { map.put("desc", permission.getDescription()); map.put("url", permission.getUrl()); map.put("sort", permission.getSort()); - map.put("parentId", permission.getParent()==null?0L:permission.getParent().getId()); + map.put("parentId", permission.getParent() == null ? 0L : permission.getParent().getId()); resultList.add(map); } @@ -75,7 +76,7 @@ public class PermissionController { } @RequestMapping("/save") - public Result save(@RequestParam @RequestBody Map params, HttpServletRequest request) { + public Result save(@RequestParam @RequestBody Map params, HttpServletRequest request) { Permission permission; Map parameterMap = request.getParameterMap(); @@ -85,15 +86,15 @@ public class PermissionController { String url = params.get("url").toString(); String parent_id = params.get("parent_id").toString(); - if (id != null && !id.isEmpty()){ + if (id != null && !id.isEmpty()) { permission = permissionDao.getById(Long.parseLong(id)); - }else { + } else { permission = new Permission(); } permission.setName(name); permission.setDescription(description); permission.setUrl(url); - if (parent_id != null && !parent_id.isEmpty()){ + if (parent_id != null && !parent_id.isEmpty()) { permission.setParent(permissionDao.getById(Long.parseLong(parent_id))); } permissionDao.save(permission); @@ -104,4 +105,56 @@ public class PermissionController { public Specification isDescriptionNull() { return (root, query, cb) -> cb.isNull(root.get("parent")); } + + + @RequestMapping("/getPermissionById") + public Result getPermissionById(Long id) { + Permission permission = permissionDao.getById(id); + Map map = new HashMap<>(); + map.put("id", permission.getId()); + map.put("name", permission.getName()); + map.put("desc", permission.getDescription()); + map.put("url", permission.getUrl()); + map.put("sort", permission.getSort()); + map.put("parentId", permission.getParent() == null ? 0L : permission.getParent().getId()); + + return Result.success(map); + } + + @RequestMapping("/getRootPermissions") + public Result getRootPermissions() { + Specification spec = isDescriptionNull(); // 仅查询description为null的情况 + List all = permissionDao.findAll(spec); + List> resultList = new ArrayList<>(); + for (Permission permission : all) { + Map map = new HashMap<>(); + map.put("id", permission.getId()); + map.put("name", permission.getName()); + map.put("desc", permission.getDescription()); + map.put("url", permission.getUrl()); + map.put("sort", permission.getSort()); + + List> childList = new ArrayList<>(); + for (Permission child : permission.getChildren()) { + Map childMap = new HashMap<>(); + childMap.put("id", child.getId()); + childMap.put("name", child.getName()); + childMap.put("desc", child.getDescription()); + childMap.put("url", child.getUrl()); + childMap.put("sort", child.getSort()); + childMap.put("parentId", child.getParent() == null ? 0L : child.getParent().getId()); + childList.add(childMap); + } + map.put("children", childList); + + resultList.add(map); + } + return Result.success(resultList); + } + + @RequestMapping("/delete") + public Result delete(Long id) { + permissionDao.deleteById(id); + return Result.success(null); + } } diff --git a/src/main/java/com/zhangmeng/online/exam/controller/RoleController.java b/src/main/java/com/zhangmeng/online/exam/controller/RoleController.java index 8c662ac..9021756 100644 --- a/src/main/java/com/zhangmeng/online/exam/controller/RoleController.java +++ b/src/main/java/com/zhangmeng/online/exam/controller/RoleController.java @@ -1,7 +1,9 @@ package com.zhangmeng.online.exam.controller; +import com.zhangmeng.online.exam.dao.PermissionDao; import com.zhangmeng.online.exam.dao.RoleDao; import com.zhangmeng.online.exam.dto.Result; +import com.zhangmeng.online.exam.entity.Permission; import com.zhangmeng.online.exam.entity.Question; import com.zhangmeng.online.exam.entity.Role; import com.zhangmeng.online.exam.entity.User; @@ -11,13 +13,12 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author zm @@ -31,6 +32,9 @@ public class RoleController { @Autowired private RoleDao roleDao; + @Autowired + private PermissionDao permissionDao; + @RequestMapping("/list") public Result list(Integer pageNum, Integer pageSize) { Pageable pageable = PageRequest.of(PageUtils.getPageNum(pageNum), pageSize, Sort.Direction.DESC, "addTime"); @@ -48,4 +52,118 @@ public class RoleController { return Result.success(pageNum, pageSize, all.getTotalElements(), resultList); } + + @RequestMapping("/getRoleById") + public Result getRoleById(Long id) { + Role role = roleDao.findById(id).get(); + + Map map = new HashMap<>(); + map.put("id", role.getId()); + map.put("name", role.getName()); + map.put("desc", role.getDescription()); + map.put("type_name", role.getType().name()); + + return Result.success(map); + } + + @RequestMapping("/getRoleTypes") + public Result getRoleTypes() { + List> resultList = new ArrayList<>(); + for (Role.Type type : Role.Type.values()) { + Map map = new HashMap<>(); + map.put("type_name", type.name()); + map.put("type_desc", type.getDesc()); + resultList.add(map); + } + return Result.success(resultList); + } + + @RequestMapping("/saveRole") + public Result saveRole(@RequestBody @RequestParam Map params) { + + String id = params.get("id").toString(); + String name = params.get("name").toString(); + String desc = params.get("desc").toString(); + String type = params.get("type").toString(); + + Role role ; + + if (id != null && !id.isEmpty()){ + role = roleDao.findById(Long.parseLong(id)).get(); + }else { + role = new Role(); + } + + role.setName(name); + role.setDescription(desc); + role.setType(Role.Type.valueOf(type)); + roleDao.save(role); + + return Result.success(null); + } + + @RequestMapping("/delete") + public Result delete(Long id) { + roleDao.deleteById(id); + return Result.success(null); + } + + @RequestMapping("/updatePermission") + public Result updatePermission(@RequestBody @RequestParam Map params) { + Long roleId = Long.parseLong(params.get("id").toString()); + String permissionIds = params.get("permissionIds").toString(); + List permissionIdList = new ArrayList<>(); + for (String permissionId : permissionIds.split(",")) { + permissionIdList.add(Long.parseLong(permissionId)); + } + List permissionList = permissionDao.findAllById(permissionIdList); + Role role = roleDao.getById(roleId); + role.setPermissions(new HashSet<>(permissionList)); + roleDao.save(role); + return Result.success(null); + } + + @RequestMapping("/getPermissionsByRole") + public Result getPermissionsByRole(Long roleId) { + Role role = roleDao.getById(roleId); + Set permissionList = role.getPermissions(); + List> resultList = new ArrayList<>(); + + for (Permission permission : permissionList) { + if (permission.getParent() == null){ + List children = permission.getChildren(); + + Map map = new HashMap<>(); + map.put("id", permission.getId()); + map.put("name", permission.getName()); + map.put("desc", permission.getDescription()); + map.put("url", permission.getUrl()); + map.put("sort", permission.getSort()); + map.put("parentId", permission.getParent() == null ? 0L : permission.getParent().getId()); + + List> childList = new ArrayList<>(); + + if (!children.isEmpty()){ + for (Permission child : children) { + if (permissionList.contains(child)){ + Map childMap = new HashMap<>(); + childMap.put("id", child.getId()); + childMap.put("name", child.getName()); + childMap.put("desc", child.getDescription()); + childMap.put("url", child.getUrl()); + childMap.put("sort", child.getSort()); + childMap.put("parentId", child.getParent() == null ? 0L : child.getParent().getId()); + childList.add(childMap); + } + } + } + + map.put("children", childList); + + resultList.add(map); + } + } + + return Result.success(resultList); + } } diff --git a/src/main/java/com/zhangmeng/online/exam/entity/Permission.java b/src/main/java/com/zhangmeng/online/exam/entity/Permission.java index f0bb89c..e68a0af 100644 --- a/src/main/java/com/zhangmeng/online/exam/entity/Permission.java +++ b/src/main/java/com/zhangmeng/online/exam/entity/Permission.java @@ -4,7 +4,9 @@ import com.zhangmeng.online.exam.entity.baseEntity.BaseEntity; import lombok.*; import javax.persistence.*; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -41,6 +43,7 @@ public class Permission extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) private Permission parent; - + @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY) + private List children = new ArrayList<>(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4f3c791..5db8607 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -44,4 +44,4 @@ jwt: - /doc.html - /webjars/** - /favicon.ico # ??FAVICON - - /init/data \ No newline at end of file + - /init/** \ No newline at end of file