Skip to content

MenuController.java:authRoutes中返回的路由需要对用户的租户身份进行检查 #35

@old6ma

Description

@old6ma

问题描述
该函数的功能应该是返回输入用户所拥有权限的路由,该函数获取资源的方式是通过输入用户的角色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()))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions