feat(菜单管理): 新增菜单\修改菜单\递归删除菜单

This commit is contained in:
bunny 2024-04-02 14:43:25 +08:00
parent 5139c4459f
commit 123542d51f
6 changed files with 194 additions and 0 deletions

View File

@ -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<Permission> buildPermissions(List<Permission> permissionList) {
ArrayList<Permission> 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<Permission> 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;
}
}

View File

@ -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<Permission> save(@RequestBody Permission permission) {
permissionService.save(permission);
return Result.success();
}
@ApiOperation(value = "修改菜单")
@PutMapping("update")
public Result<Permission> updateById(@RequestBody Permission permission) {
permissionService.updateById(permission);
return Result.success();
}
@ApiOperation(value = "递归删除菜单")
@DeleteMapping("remove/{id}")
public Result<Permission> remove(@PathVariable Long id) {
permissionService.removeChildById(id);
return Result.success();
}
}

View File

@ -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<Permission> {
}

View File

@ -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<Permission> {
/**
* 获取所有菜单列表
*
* @return 权限列表
*/
List<Permission> queryAllMenu();
/**
* 递归删除
*
* @param id 删除ID
*/
void removeChildById(Long id);
}

View File

@ -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<PermissionMapper, Permission> implements PermissionService {
@Autowired
private PermissionServiceModule permissionServiceModule;
/**
* 获取所有菜单列表
*
* @return 权限列表
*/
@Override
public List<Permission> queryAllMenu() {
// 查询所有菜单
List<Permission> permissions = baseMapper.selectList(null);
// 转换要求数据格式
return PermissionHelper.buildPermissions(permissions);
}
/**
* 递归删除
*
* @param id 删除ID
*/
@Override
public void removeChildById(Long id) {
ArrayList<Long> idList = new ArrayList<>();
// 获取菜单下子菜单
permissionServiceModule.getAllPermissionId(id, idList);
// 调用方法根据多个菜单ID删除
baseMapper.deleteBatchIds(idList);
}
}

View File

@ -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<Long> idList) {
List<Permission> permissions = permissionMapper.selectList(Wrappers.<Permission>lambdaQuery().eq(Permission::getId, id));
permissions.forEach(item -> {
idList.add(item.getId());
getAllPermissionId(item.getId(), idList);
});
}
}