From b40b2a7141f3edbdd0659fc4b68864275c656ca1 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 15 Jul 2025 17:10:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=96=B0=E5=A2=9E=E5=89=A9?= =?UTF-8?q?=E4=BD=99=E6=8E=A5=E5=8F=A3=E3=80=82=E8=8F=9C=E5=8D=95=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=92=8C=E8=A7=92=E8=89=B2=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/demo/controller/MenuController.java | 7 ++++ .../example/demo/controller/RoleController.java | 10 ++++++ .../java/com/example/demo/domain/vo/RoleMenu.java | 20 +++++++++++ .../java/com/example/demo/domain/vo/RoleVo.java | 5 ++- .../java/com/example/demo/mapper/MenuMapper.java | 10 ++++++ .../java/com/example/demo/mapper/RoleMapper.java | 10 ++++++ .../java/com/example/demo/service/MenuService.java | 7 ++++ .../java/com/example/demo/service/RoleService.java | 5 +++ .../example/demo/serviceImpl/MenuServiceImpl.java | 42 ++++++++++++++++++++++ .../example/demo/serviceImpl/RoleServiceImpl.java | 33 ++++++++++++++++- src/main/resources/mapper/MenuMapper.xml | 15 ++++++++ src/main/resources/mapper/RoleMapper.xml | 18 ++++++++++ 12 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/vo/RoleMenu.java diff --git a/src/main/java/com/example/demo/controller/MenuController.java b/src/main/java/com/example/demo/controller/MenuController.java index dec8ef1..eb54768 100644 --- a/src/main/java/com/example/demo/controller/MenuController.java +++ b/src/main/java/com/example/demo/controller/MenuController.java @@ -37,4 +37,11 @@ public class MenuController { List permissionTree = menuService.getPermissionTree(roleVo.getId()); return Result.success(permissionTree); } + + //新增权限 + @PostMapping("/add") + public Result addPermission(@RequestBody RoleVo roleVo) { + + return menuService.addPermission(roleVo); + } } diff --git a/src/main/java/com/example/demo/controller/RoleController.java b/src/main/java/com/example/demo/controller/RoleController.java index d365c8b..237b919 100644 --- a/src/main/java/com/example/demo/controller/RoleController.java +++ b/src/main/java/com/example/demo/controller/RoleController.java @@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * @program: gold-java * @ClassName RoleController @@ -38,4 +40,12 @@ public class RoleController { return roleService.addRole(roleVo); } + //查找全部角色 + @PostMapping("/selectAll") + public Result selectRole() { + List list = roleService.selectAllRole(); + return Result.success(list); + } + + } diff --git a/src/main/java/com/example/demo/domain/vo/RoleMenu.java b/src/main/java/com/example/demo/domain/vo/RoleMenu.java new file mode 100644 index 0000000..4b709f7 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/RoleMenu.java @@ -0,0 +1,20 @@ +package com.example.demo.domain.vo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: gold-java + * @ClassName RoleMenu + * @description: + * @author: Double + * @create: 2025−07-15 16:19 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +public class RoleMenu { + private Integer roleId; // 角色id + private Integer menuId; // 菜单id +} diff --git a/src/main/java/com/example/demo/domain/vo/RoleVo.java b/src/main/java/com/example/demo/domain/vo/RoleVo.java index 7cd4ef8..17c9616 100644 --- a/src/main/java/com/example/demo/domain/vo/RoleVo.java +++ b/src/main/java/com/example/demo/domain/vo/RoleVo.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @program: gold-java @@ -26,10 +27,12 @@ public class RoleVo implements Serializable { private String roleName; // 角色名 private String roleKey; // 角色标识符 private Integer priority;//优先级 - private String fatherId;//上级角色id + private Integer fatherId;//上级角色id @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 创建时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date updateTime; // 更新时间 + + List menuIds;//拥有的菜单id } diff --git a/src/main/java/com/example/demo/mapper/MenuMapper.java b/src/main/java/com/example/demo/mapper/MenuMapper.java index 2581749..bedd339 100644 --- a/src/main/java/com/example/demo/mapper/MenuMapper.java +++ b/src/main/java/com/example/demo/mapper/MenuMapper.java @@ -1,7 +1,11 @@ package com.example.demo.mapper; +import com.example.demo.domain.entity.Menu; +import com.example.demo.domain.entity.Role; import com.example.demo.domain.vo.MenuVo; +import com.example.demo.domain.vo.RoleMenu; +import com.example.demo.domain.vo.RoleVo; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -18,4 +22,10 @@ public interface MenuMapper { //根据角色ID查菜单权限 List selectMenusByRoleId(Integer roleId); + + //新增权限 + void addPermission(List roleMenuList); + + //查找菜单id + Menu selectByMenuId(Integer id); } diff --git a/src/main/java/com/example/demo/mapper/RoleMapper.java b/src/main/java/com/example/demo/mapper/RoleMapper.java index bd8e333..ab01315 100644 --- a/src/main/java/com/example/demo/mapper/RoleMapper.java +++ b/src/main/java/com/example/demo/mapper/RoleMapper.java @@ -2,8 +2,10 @@ package com.example.demo.mapper; import com.example.demo.domain.entity.Role; +import com.example.demo.domain.vo.RoleVo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; import java.util.Random; /** @@ -21,4 +23,12 @@ public interface RoleMapper { //查找角色名 Role selectByRoleName(String roleName); + + //查找角色id + Role selectByRoleId(Integer id); + //查找全部角色 + List selectAllRole(); + + //新建角色 + void addRole(RoleVo roleVo); } diff --git a/src/main/java/com/example/demo/service/MenuService.java b/src/main/java/com/example/demo/service/MenuService.java index 01513af..93dae2c 100644 --- a/src/main/java/com/example/demo/service/MenuService.java +++ b/src/main/java/com/example/demo/service/MenuService.java @@ -2,6 +2,8 @@ package com.example.demo.service; import java.util.List; import com.example.demo.domain.vo.MenuVo; +import com.example.demo.domain.vo.Result; +import com.example.demo.domain.vo.RoleVo; /** * @program: gold-java @@ -17,4 +19,9 @@ public interface MenuService { //根据角色ID生成权限树 List getPermissionTree(Integer roleId); + + //新增权限 + Result addPermission(RoleVo roleVo); + + } diff --git a/src/main/java/com/example/demo/service/RoleService.java b/src/main/java/com/example/demo/service/RoleService.java index 6a64c0e..b802381 100644 --- a/src/main/java/com/example/demo/service/RoleService.java +++ b/src/main/java/com/example/demo/service/RoleService.java @@ -4,6 +4,8 @@ package com.example.demo.service; import com.example.demo.domain.vo.Result; import com.example.demo.domain.vo.RoleVo; +import java.util.List; + /** * @program: gold-java * @ClassName RoleService @@ -17,4 +19,7 @@ public interface RoleService { //新增角色 Result addRole(RoleVo roleVo); + + //查找全部角色 + List selectAllRole(); } diff --git a/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java index 19b1da4..7e792e1 100644 --- a/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java @@ -1,11 +1,17 @@ package com.example.demo.serviceImpl; import com.example.demo.domain.vo.MenuVo; +import com.example.demo.domain.vo.Result; +import com.example.demo.domain.vo.RoleMenu; +import com.example.demo.domain.vo.RoleVo; import com.example.demo.mapper.MenuMapper; +import com.example.demo.mapper.RoleMapper; import com.example.demo.service.MenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -25,6 +31,8 @@ public class MenuServiceImpl implements MenuService { @Autowired private MenuMapper menuMapper; + @Autowired + private RoleMapper roleMapper; //构建菜单树 @Override public List getPermissionTree(Integer roleId) { @@ -55,4 +63,38 @@ public class MenuServiceImpl implements MenuService { return children; } + //新增权限 + @Override + @Transactional + public Result addPermission(RoleVo roleVo) { + //校验 + if(Objects.isNull(roleVo)) { + return Result.error("传入角色为空"); + } + if(Objects.isNull(roleVo.getId())) { + return Result.error("角色ID为空"); + } + if(roleVo.getMenuIds() == null||roleVo.getMenuIds().isEmpty()) { + return Result.error("角色权限为空"); + } + if(roleMapper.selectByRoleId(roleVo.getId())==null){ + return Result.error("角色不存在"); + } + //角色菜单权限对应 + List roleMenuList = new ArrayList<>(); + //循环导入 + for (Integer menuId : roleVo.getMenuIds()) { + if(menuMapper.selectByMenuId(menuId)==null){ + return Result.error("菜单不存在"); + } + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setRoleId(roleVo.getId()); + roleMenu.setMenuId(menuId); + roleMenuList.add(roleMenu); + } + //提交 + menuMapper.addPermission(roleMenuList); + return Result.success("权限新增成功"); + } + } diff --git a/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java index b33b05b..50c7db9 100644 --- a/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java @@ -1,12 +1,17 @@ package com.example.demo.serviceImpl; +import com.example.demo.domain.entity.Role; import com.example.demo.domain.vo.Result; import com.example.demo.domain.vo.RoleVo; import com.example.demo.mapper.RefundMapper; import com.example.demo.mapper.RoleMapper; +import com.example.demo.service.MenuService; import com.example.demo.service.RoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** * @program: gold-java @@ -22,11 +27,14 @@ public class RoleServiceImpl implements RoleService { @Autowired private RoleMapper roleMapper; + @Autowired + private MenuService menuService; //新增角色 @Override + @Transactional public Result addRole(RoleVo roleVo) { - //校验角色名 + //校验角色 if(roleVo.getRoleName()==null|| roleVo.getRoleName().isEmpty()){ return Result.error("角色名为空"); } @@ -36,8 +44,31 @@ public class RoleServiceImpl implements RoleService { if(roleVo.getPriority()==null){ return Result.error("优先级为空"); } + if(roleVo.getMenuIds()==null||roleVo.getMenuIds().isEmpty()){ + return Result.error("权限为空"); + } + try { + roleMapper.addRole(roleVo); + Role role = roleMapper.selectByRoleName(roleVo.getRoleName()); + if(role==null){ + return Result.error("角色添加失败"); + }else{ + roleVo.setId(role.getId()); + } + menuService.addPermission(roleVo); + }catch (Exception e) + { + return Result.error("添加失败"); + } + return Result.success("创建成功"); } + + //查找全部角色 + @Override + public List selectAllRole() { + return roleMapper.selectAllRole(); + } } diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml index 423b335..e753797 100644 --- a/src/main/resources/mapper/MenuMapper.xml +++ b/src/main/resources/mapper/MenuMapper.xml @@ -20,4 +20,19 @@ m.parent_id,m.priority + + INSERT INTO role_menu (role_id, menu_id) + VALUES + + (#{item.roleId}, #{item.menuId}) + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml index 76499f6..491113c 100644 --- a/src/main/resources/mapper/RoleMapper.xml +++ b/src/main/resources/mapper/RoleMapper.xml @@ -10,4 +10,22 @@ + + + + + + + INSERT INTO role + (role_name, priority, father_id) + VALUES + (#{roleName}, #{priority}, #{fatherId}) + \ No newline at end of file