feat(菜单管理): 新增菜单\修改菜单\递归删除菜单
This commit is contained in:
parent
5139c4459f
commit
123542d51f
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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> {
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue