目录
1)后端【已有】
2)前端
要求:左右分屏
角色列表编辑 删除 权限展示授权
1)后端:查询所有的权限(含孩子)
方式1:在controller中排序查询所有,然后使用Map进行缓存处理,将所有权限拼凑成父子关系。
方式2:使用mapper注解版
编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)
编写service:查询所有
编写controller:查询所有
编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)
package com.czxy.classes.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.czxy.sys.SysPermission; import org.apache.ibatis.annotations.*; import java.util.List; /** * @author 桐叔 * @email liangtong@itcast.cn * @description */ @Mapper public interface SysPermissionMapper extends BaseMapper{ /** * 通过父id查询所有的权限 * @author 桐叔 * @email liangtong@itcast.cn * @return */ @Select("SELECT * FROM sys_permission WHERE parent_id = #{parentId}") @Results({ @Result(property = "id", column = "id"), @Result(property = "permName", column = "permName"), @Result(property = "parentId", column = "parent_id"), @Result(property = "path", column = "path"), @Result(property = "children", many = @Many(select = "com.czxy.classes.mapper.SysPermissionMapper.findAllByParentId"), column = "id") }) public List findAllByParentId(@Param("parentId") Integer parentId) ; }
编写service:查询所有
接口
@Service @Transactional public interface SysPermissionService extends IService{ public List findAllByParentId(Integer parentId) ; }
实现类
package com.czxy.classes.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.czxy.classes.mapper.SysPermissionMapper; import com.czxy.classes.service.SysPermissionService; import com.czxy.sys.SysPermission; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @author 桐叔 * @email liangtong@itcast.cn * @description */ @Service @Transactional public class SysPermissionServiceImpl extends ServiceImplimplements SysPermissionService { @Override public List findAllByParentId(Integer parentId) { return baseMapper.findAllByParentId(parentId); } }
编写controller:查询所有
package com.czxy.classes.controller;
import com.czxy.classes.service.SysPermissionService;
import com.czxy.sys.SysPermission;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @author 桐叔
* @email liangtong@itcast.cn
* @description
*/
@RestController
@RequestMapping("/perm")
public class SysPermissionController {
@Resource
private SysPermissionService sysPermissionService;
/**
* 查询所有,含孩子
* @author 桐叔
* @email liangtong@itcast.cn
* @return
*/
@GetMapping("/parent/{parentId}")
public BaseResult findAllByParentId(@PathVariable("parentId") Integer parentId) {
// 查询
List list = sysPermissionService.findAllByParentId(parentId);
return BaseResult.ok("查询成功", list);
}
}
2)后端:查询指定角色的所有的权限
提交数据:roleId = 1
获得数据:[ {roleId: 1, permId: 1}, {roleId: 1, permId: 2}, ...] --> [1,2,3,4]

package com.czxy.classes.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.czxy.classes.service.SysRolePermissionService;
import com.czxy.sys.SysRolePermission;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 桐叔
* @email liangtong@itcast.cn
* @description
*/
@RestController
@RequestMapping("/rolePerm")
public class SysRolePermissionController {
@Resource
private SysRolePermissionService sysRolePermissionService;
@GetMapping("/role/{roleId}")
public BaseResult findAllByRoleId(@PathVariable("roleId") Integer roleId) {
//1 条件 roleId = 1
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id", roleId);
//2 查询所有- 角色权限对象
List list = sysRolePermissionService.list(queryWrapper);
//3 处理数据,只需要权限id
List roleIdList = list.stream().map(sysRolePermission -> sysRolePermission.getPermId()).collect(Collectors.toList());
//4 返回
return BaseResult.ok("查询成功", roleIdList);
}
}
3)前端:展示所有的权限
编写变量、发送ajax查询、页面加载成功时调用
使用tree进行展示

角色列表编辑 删除 权限展示授权
4)前端:回显指定角色的权限
表格行的点击,并获得当前行的数据
查询当前角色对应的所有选线,并回显到tree中

async findAllPermByRoleId(row, column, event) {
// ajax 查询 /user-service/rolePerm/role/1
let { data: baseResult } = await this.$axios.get(`/user-service/rolePerm/role/${row.id}`)
// 处理
if(baseResult.code == 20000) {
// 查询成功,将查询的结果填充到右侧tree中
this.$refs.permTree.setCheckedKeys(baseResult.data);
} else {
this.$message.error(baseResult.message)
}
}
角色列表编辑 删除 权限展示授权
5)前端:提交授权表单

角色列表编辑 删除 权限展示授权
6)后端:授权
编写controller
编写service
编写controller

@PostMapping("/addPerm")
public BaseResult addPermWithRoleId(@RequestBody SysRole sysRole) {
try {
// 添加权限
sysRolePermissionService.addPermWithRoleId(sysRole);
// 提示
return BaseResult.ok("授权成功");
} catch (Exception e) {
return BaseResult.error("授权失败");
}
} 编写service

接口
@Service @Transactional public interface SysRolePermissionService extends IService{ void addPermWithRoleId(SysRole sysRole); }
实现类
package com.czxy.classes.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.czxy.classes.mapper.SysRolePermissionMapper; import com.czxy.classes.service.SysRolePermissionService; import com.czxy.sys.SysRole; import com.czxy.sys.SysRolePermission; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author 桐叔 * @email liangtong@itcast.cn * @description */ @Service @Transactional public class SysRolePermissionServiceImpl extends ServiceImplimplements SysRolePermissionService { @Override public void addPermWithRoleId(SysRole sysRole) { // 1 删除 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id", sysRole.getId()); baseMapper.delete(queryWrapper); // 2 添加 for (Integer permId : sysRole.getPermIds()) { SysRolePermission sysRolePermission = new SysRolePermission(sysRole.getId(), permId); baseMapper.insert(sysRolePermission); } } }