mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-03 11:28:12 +08:00
请不要在没有先创建Issue的情况下创建Pull Request。 ## 变更的目的是什么 修复未勾选系统管理查看权限,但是依然可以查看系统管理的问题 ## 简短的更新日志 修复未勾选系统管理查看权限,但是依然可以查看系统管理的问题 ## 验证这一变化 ### 权限表 <img width="587" alt="image" src="https://github.com/didi/KnowStreaming/assets/43955116/497fea54-3216-4ae7-8dab-304a07e81209"> ### 效果 <img width="1500" alt="image" src="https://github.com/didi/KnowStreaming/assets/43955116/1e4a8260-336e-4c15-a244-5f768107a990"> 请遵循此清单,以帮助我们快速轻松地整合您的贡献: * [x] 一个 PR(Pull Request的简写)只解决一个问题,禁止一个 PR 解决多个问题; * [x] 确保 PR 有对应的 Issue(通常在您开始处理之前创建),除非是书写错误之类的琐碎更改不需要 Issue ; * [x] 格式化 PR 及 Commit-Log 的标题及内容,例如 #861 。PS:Commit-Log 需要在 Git Commit 代码时进行填写,在 GitHub 上修改不了; * [x] 编写足够详细的 PR 描述,以了解 PR 的作用、方式和原因; * [x] 编写必要的单元测试来验证您的逻辑更正。如果提交了新功能或重大更改,请记住在 test 模块中添加 integration-test; * [x] 确保编译通过,集成测试通过; Co-authored-by: suzj <hzsuzj@qq.com>
151 lines
4.8 KiB
TypeScript
151 lines
4.8 KiB
TypeScript
import React, { useLayoutEffect } from 'react';
|
|
import { Utils, AppContainer } from 'knowdesign';
|
|
import api, { MetricType } from '../api';
|
|
import { goLogin } from '@src/constants/axiosConfig';
|
|
|
|
// 权限对应表
|
|
export enum ClustersPermissionMap {
|
|
CLUSTERS_MANAGE = '多集群管理',
|
|
CLUSTERS_MANAGE_VIEW = '多集群管理查看',
|
|
//仅用作隐藏掉系统管理菜单
|
|
SYS_MANAGE = '系统管理',
|
|
SYS_MANAGE_VIEW = '系统管理查看',
|
|
// Cluster
|
|
CLUSTER_ADD = '接入集群',
|
|
CLUSTER_DEL = '删除集群',
|
|
CLUSTER_CHANGE_HEALTHY = 'Cluster-修改健康规则',
|
|
CLUSTER_CHANGE_INFO = 'Cluster-修改集群信息',
|
|
// LoadReBalance
|
|
REBALANCE_CYCLE = 'Cluster-LoadReBalance-周期均衡',
|
|
REBALANCE_IMMEDIATE = 'Cluster-LoadReBalance-立即均衡',
|
|
REBALANCE_SETTING = 'Cluster-LoadReBalance-设置集群规格',
|
|
// Broker
|
|
BROKER_CHANGE_CONFIG = 'Broker-修改Broker配置',
|
|
// Topic
|
|
TOPIC_CHANGE_CONFIG = 'Topic-修改Topic配置',
|
|
TOPIC_RESET_OFFSET = 'Topic-重置Offset',
|
|
TOPIC_DEL = 'Topic-删除Topic',
|
|
TOPIC_EXPOND = 'Topic-扩分区',
|
|
TOPIC_ADD = 'Topic-新增Topic',
|
|
TOPIC_MOVE_REPLICA = 'Topic-迁移副本',
|
|
TOPIC_CHANGE_REPLICA = 'Topic-扩缩副本',
|
|
TOPIC_REPLICATOR = 'Topic-新增Topic复制',
|
|
TOPIC_CANCEL_REPLICATOR = 'Topic-详情-取消Topic复制',
|
|
// Consumers
|
|
CONSUMERS_RESET_OFFSET = 'Consumers-重置Offset',
|
|
// Test
|
|
TEST_CONSUMER = 'Test-Consumer',
|
|
TEST_PRODUCER = 'Test-Producer',
|
|
// MM2
|
|
MM2_ADD = 'MM2-新增',
|
|
MM2_CHANGE_CONFIG = 'MM2-编辑',
|
|
MM2_DELETE = 'MM2-删除',
|
|
MM2_RESTART = 'MM2-重启',
|
|
MM2_STOP_RESUME = 'MM2-暂停&恢复',
|
|
// Connector
|
|
CONNECTOR_ADD = 'Connector-新增',
|
|
CONNECTOR_CHANGE_CONFIG = 'Connector-编辑',
|
|
CONNECTOR_DELETE = 'Connector-删除',
|
|
CONNECTOR_RESTART = 'Connector-重启',
|
|
CONNECTOR_STOP_RESUME = 'Connector-暂停&恢复',
|
|
}
|
|
|
|
export interface PermissionNode {
|
|
id: number;
|
|
permissionName: ClustersPermissionMap | null;
|
|
parentId: number | null;
|
|
has: boolean;
|
|
leaf: boolean;
|
|
childList: PermissionNode[];
|
|
}
|
|
|
|
export interface MetricsDefine {
|
|
[metricName: string]: {
|
|
category: string;
|
|
type: number;
|
|
name: string;
|
|
desc: string;
|
|
unit: string;
|
|
support: boolean | null;
|
|
minVersion: number;
|
|
maxVersion: number;
|
|
};
|
|
}
|
|
|
|
const CommonConfig = () => {
|
|
const [global, setGlobal] = AppContainer.useGlobalValue();
|
|
const userInfo = localStorage.getItem('userInfo');
|
|
|
|
// 获取权限树
|
|
const getPermissions = (userId: number) => {
|
|
const getUserInfo = Utils.request(api.getUserInfo(userId), {
|
|
retryTimes: 2,
|
|
});
|
|
const getPermissionTree = Utils.request(api.getPermissionTree, {
|
|
retryTimes: 2,
|
|
});
|
|
|
|
Promise.all([getPermissionTree, getUserInfo]).then(([permissionTree, userDetail]: [PermissionNode, any]) => {
|
|
const allPermissions = permissionTree.childList;
|
|
|
|
// 获取用户在多集群管理拥有的权限
|
|
const userPermissionTree = userDetail.permissionTreeVO.childList;
|
|
const clustersPermissions = userPermissionTree.find(
|
|
(sys: PermissionNode) => sys.permissionName === ClustersPermissionMap.CLUSTERS_MANAGE
|
|
);
|
|
const userPermissions: ClustersPermissionMap[] = [];
|
|
clustersPermissions &&
|
|
clustersPermissions.childList.forEach((node: PermissionNode) => node.has && userPermissions.push(node.permissionName));
|
|
|
|
// 获取用户在系统管理拥有的权限
|
|
const configPermissions = userPermissionTree.find(
|
|
(sys: PermissionNode) => sys.permissionName === ClustersPermissionMap.SYS_MANAGE
|
|
);
|
|
configPermissions &&
|
|
configPermissions.childList.forEach((node: PermissionNode) => node.has && userPermissions.push(node.permissionName));
|
|
|
|
const hasPermission = (permissionName: ClustersPermissionMap) => permissionName && userPermissions.includes(permissionName);
|
|
|
|
setGlobal((curState: any) => ({ ...curState, permissions: allPermissions, userPermissions, hasPermission, userInfo }));
|
|
});
|
|
|
|
return true;
|
|
};
|
|
|
|
// 获取指标信息
|
|
const getMetricsDefine = () => {
|
|
Utils.request(api.getKafkaVersionItems(), {
|
|
retryTimes: 2,
|
|
}).then((metricsDefine: MetricsDefine) => {
|
|
const getMetricDefine = (type: MetricType, metricName: string) => metricsDefine[`${type}@${metricName}`] || null;
|
|
setGlobal((curState: any) => ({ ...curState, metricsDefine, getMetricDefine }));
|
|
});
|
|
};
|
|
|
|
useLayoutEffect(() => {
|
|
// 如果未登录,直接跳转到登录页
|
|
const userInfo = localStorage.getItem('userInfo');
|
|
let userId: number;
|
|
|
|
try {
|
|
userId = JSON.parse(userInfo).id;
|
|
if (!userId) throw 'err';
|
|
} catch (_) {
|
|
goLogin();
|
|
return;
|
|
}
|
|
|
|
// 仅获取一次全局权限
|
|
if (!global.permissions) {
|
|
getPermissions(userId);
|
|
}
|
|
if (!global.metricsDefine) {
|
|
getMetricsDefine();
|
|
}
|
|
}, []);
|
|
|
|
return <></>;
|
|
};
|
|
|
|
export default CommonConfig;
|