-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
问题描述
该函数的功能应该是返回输入用户所拥有权限的路由,该函数获取资源的方式是通过输入用户的角色id所获得的,但这里应该在用户角色的基础之上,进一步检查是否为admin租户还是普通租户,区分租户身份来返回不同租户可访问的资源,所以这里需要检查租户身份的不同再对路由进行返回
该函数以及其调用的函数如下
MenuController.java:authRoutes:
/** * 获取配置的角色权限 */ @GetMapping("auth-routes") @ApiOperationSupport(order = 12) @Operation(summary = "菜单的角色权限") public R<List<Kv>> authRoutes(BladeUser user) { if (Func.isEmpty(user) || user.getUserId() == 0L) { return null; } return R.data(menuService.authRoutes(user)); }
MenuServiceImpl.java:authRotes:
@Override public List<Kv> authRoutes(BladeUser user) { if (Func.isEmpty(user)) { return null; } List<MenuDTO> routes = baseMapper.authRoutes(Func.toLongList(user.getRoleId())); List<Kv> list = new ArrayList<>(); routes.forEach(route -> list.add(Kv.init().set(route.getPath(), Kv.init().set("authority", Func.toStrArray(route.getAlias()))))); return list; }
以下为MenuServiceImpl.java:authRotes的两个同文件内的函数代码
@Override
public List<MenuVO> grantTree(BladeUser user) {
return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId())));
}
@Override
public List<MenuVO> grantDataScopeTree(BladeUser user) {
return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
}
从这两个函数可以进一步确定,路由的分配会与租户身份相关,如统一服务下的管理员租户和普通租户所拥有的路由应该是不同的
建议添加权限检查:
user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()))