功能:创建角色,给每个角色设置页面权限
表设计:
1.角色表(菜单id用逗号隔开)
2.资源表:记录所有菜单及其权限
3.用户表
4.接口功能
根据token获取所有用户权限用户信息
@ApiOperationSupport(order = 2)
@ApiOperation("根据token查询用户信息")
@GetMapping("/verify")
public CommonResult<EmployeeResourceResp> employeeVerify(@RequestHeader("MZ_TOKEN") String token) throws Exception {
EmployeeResourceResp resp = new EmployeeResourceResp();
List<EmployeeResourceListResp> employeeResourceListResps = null;
// 根据token解析用户信息(工具类)
UserInfo userInfo = authService.verifyUser(token);
if(userInfo != null && userInfo.getId() != null) {
resp.setId(userInfo.getId());
resp.setUsername(userInfo.getUsername());
resp.setName(userInfo.getName());
// 获取菜单路由(获取所有资源表信息,按type等级返回树形结构)
employeeResourceListResps = mzkEmployeeService.employeeVerify(userInfo.getId());
resp.setResource(employeeResourceListResps);
// 获取所有有权限的菜单和按钮(前端按钮展示需要,只返回有权限的菜单和按钮)
List<EmployeeMenuResp> menus = mzkEmployeeService.getMenuAndPoint(userInfo.getId());
resp.setPoint(menus);
}
return CommonResult.success(resp);
}
/**
* 获取当前用户的所有菜单权限
* @param id
* @return
*/
public List<EmployeeResourceListResp> employeeVerify(Long id) {
// 获取用户信息
MzkEmployee mzkEmployee = mzkEmployeeMapper.selectByPrimaryKey(id);
if(mzkEmployee != null) {
// 获取角色信息
MzkRoleResource role = mzkRoleMapper.getRoleByRoleId(mzkEmployee.getRoleId());
// 获取所有菜单信息
if(role != null && StringUtils.isNotEmpty(role.getResourceId())) {
// 匹配用户菜单权限
List<EmployeeResourceListResp> resourceList = this.getResourceList(0L, 0);
for (String resourceId : role.getResourceId().split(",")) {
this.setSelectTrue(resourceList, resourceId);
}
return resourceList;
} else {
throw new BusinessException(ResultCodeEnum.ROLE_NOT_EXIT);
}
} else {
throw new BusinessException(ResultCodeEnum.EMPLOYEE_NOT_EXIT);
}
}
/**
* 获取所有资源信息
* @param patentId 父菜单id
* @return
*/
private List<EmployeeResourceListResp> getResourceList(Long patentId, Integer button) {
List<EmployeeResourceListResp> resourceListByType = mzkResourceMapper.getResourceList(patentId, button);
for (EmployeeResourceListResp resource : resourceListByType) {
resource.setResource(getResourceList(resource.getId(), button));
}
return resourceListByType;
}
这一段功能主要是获取所有资源信息按type形成树形结构,再遍历把有权限的selected置为true,方便前端区分
结果: