diff --git a/common/common-util/src/main/java/com/atguigu/common/utils/PermissionHelper.java b/common/common-util/src/main/java/com/atguigu/common/utils/PermissionHelper.java new file mode 100644 index 0000000..f0ab2f7 --- /dev/null +++ b/common/common-util/src/main/java/com/atguigu/common/utils/PermissionHelper.java @@ -0,0 +1,40 @@ +package com.atguigu.common.utils; + +import com.atguigu.ssyx.model.acl.Permission; + +import java.util.ArrayList; +import java.util.List; + +public class PermissionHelper { + public static List buildPermissions(List permissionList) { + ArrayList trees = new ArrayList<>(); + + permissionList.forEach(permission -> { + if (permission.getPid() == 0) { + permission.setLevel(1); + trees.add(findChildren(permission, permissionList)); + } + }); + + return trees; + } + + private static Permission findChildren(Permission permission, List allList) { + permission.setChildren(new ArrayList<>()); + + allList.forEach(p -> { + if (p.getId().equals(permission.getPid())) { + int level = permission.getLevel() + 1; + p.setLevel(level); + + if (permission.getChildren() == null) { + permission.setChildren(new ArrayList<>()); + } + // 封装下层数据 + permission.getChildren().add(findChildren(p, allList)); + } + }); + + return permission; + } +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/PermissionController.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/PermissionController.java new file mode 100644 index 0000000..303adfc --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/PermissionController.java @@ -0,0 +1,42 @@ +package com.atguigu.ssyx.acl.controller; + + +import com.atguigu.ssyx.acl.service.PermissionService; +import com.atguigu.ssyx.common.result.Result; +import com.atguigu.ssyx.model.acl.Permission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +@RestController +@RequestMapping("/admin/acl/permission") +@Api(tags = "菜单管理") +@Slf4j +public class PermissionController { + @Autowired + private PermissionService permissionService; + + @ApiOperation(value = "新增菜单") + @PostMapping("save") + public Result save(@RequestBody Permission permission) { + permissionService.save(permission); + return Result.success(); + } + + @ApiOperation(value = "修改菜单") + @PutMapping("update") + public Result updateById(@RequestBody Permission permission) { + permissionService.updateById(permission); + return Result.success(); + } + + @ApiOperation(value = "递归删除菜单") + @DeleteMapping("remove/{id}") + public Result remove(@PathVariable Long id) { + permissionService.removeChildById(id); + return Result.success(); + } +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/PermissionMapper.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/PermissionMapper.java new file mode 100644 index 0000000..5fc8c5a --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/PermissionMapper.java @@ -0,0 +1,10 @@ +package com.atguigu.ssyx.acl.mapper; + +import com.atguigu.ssyx.model.acl.Permission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface PermissionMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/PermissionService.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/PermissionService.java new file mode 100644 index 0000000..7cc67b0 --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/PermissionService.java @@ -0,0 +1,23 @@ +package com.atguigu.ssyx.acl.service; + +import com.atguigu.ssyx.model.acl.Permission; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +public interface PermissionService extends IService { + + /** + * 获取所有菜单列表 + * + * @return 权限列表 + */ + List queryAllMenu(); + + /** + * 递归删除 + * + * @param id 删除ID + */ + void removeChildById(Long id); +} \ No newline at end of file diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/PermissionServiceImpl.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/PermissionServiceImpl.java new file mode 100644 index 0000000..1bc619b --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/PermissionServiceImpl.java @@ -0,0 +1,48 @@ +package com.atguigu.ssyx.acl.service.impl; + +import com.atguigu.common.utils.PermissionHelper; +import com.atguigu.ssyx.acl.mapper.PermissionMapper; +import com.atguigu.ssyx.acl.service.PermissionService; +import com.atguigu.ssyx.acl.service.module.PermissionServiceModule; +import com.atguigu.ssyx.model.acl.Permission; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PermissionServiceImpl extends ServiceImpl implements PermissionService { + @Autowired + private PermissionServiceModule permissionServiceModule; + + /** + * 获取所有菜单列表 + * + * @return 权限列表 + */ + @Override + public List queryAllMenu() { + // 查询所有菜单 + List permissions = baseMapper.selectList(null); + // 转换要求数据格式 + return PermissionHelper.buildPermissions(permissions); + } + + /** + * 递归删除 + * + * @param id 删除ID + */ + @Override + public void removeChildById(Long id) { + ArrayList idList = new ArrayList<>(); + + // 获取菜单下子菜单 + permissionServiceModule.getAllPermissionId(id, idList); + + // 调用方法根据多个菜单ID删除 + baseMapper.deleteBatchIds(idList); + } +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/module/PermissionServiceModule.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/module/PermissionServiceModule.java new file mode 100644 index 0000000..abef83b --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/module/PermissionServiceModule.java @@ -0,0 +1,31 @@ +package com.atguigu.ssyx.acl.service.module; + +import com.atguigu.ssyx.acl.mapper.PermissionMapper; +import com.atguigu.ssyx.model.acl.Permission; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PermissionServiceModule { + @Autowired + private PermissionMapper permissionMapper; + + /** + * 获取菜单下子菜单 + * + * @param id 菜单ID + * @param idList IDList + */ + public void getAllPermissionId(Long id, ArrayList idList) { + List permissions = permissionMapper.selectList(Wrappers.lambdaQuery().eq(Permission::getId, id)); + + permissions.forEach(item -> { + idList.add(item.getId()); + getAllPermissionId(item.getId(), idList); + }); + } +}