问题概述
为了避免越权问题,TDS 产品中的用户,无法赋予角色 “自己没有的权限”,同时用户又可以将自身角色的权限去掉(包括 admin),一旦误操作,导致所有角色都不具有某个组件的权限,就再也无法访问对应的组件。
本文提供一种直接操作元数据库的方式,恢复某个角色对应组件的权限
操作元数据库是敏感行为,在执行下列步骤之前,建议提前确认:
1、已经安装对应服务,依赖正常,启动正常
2、拥有对应服务的 license
3、没有手动关闭过一级、二级菜单显示
操作流程
连接 KunDB 元数据库,所有操作均在 Foundation 库中完成
查询表格
select * from t_role_info;
根据 name 分辨需要给哪个角色赋权,取 id 的值,本文选择系统管理员,id 为 1

继续查询表格
select * from t_module_info;
根据 name 分辨需要恢复哪个组件的权限,此处以 megaindex 为例,取组件的 id 为 10

继续查询表格,此处 id 即为上一步获取的 id 号
select * from t_menu_info where id = 10;
同样取 id 的值,此处为:71、72、73、74、105

最后,将权限插入表格 t_role_menu ,第一列为随机生成 UUID 的 md5 值,第二列为角色 id,第三列为菜单 id,其余置为 NULL
共 1 个角色 id,5 个菜单 id,故执行 1*5=5 条 sql 语句:
insert into t_role_menu (id, role_id, menu_id, create_user, create_time, update_user, update_time) values(md5(uuid()), '1', '71', NULL, NULL, NULL, NULL);
insert into t_role_menu (id, role_id, menu_id, create_user, create_time, update_user, update_time) values(md5(uuid()), '1', '72', NULL, NULL, NULL, NULL);
insert into t_role_menu (id, role_id, menu_id, create_user, create_time, update_user, update_time) values(md5(uuid()), '1', '73', NULL, NULL, NULL, NULL);
insert into t_role_menu (id, role_id, menu_id, create_user, create_time, update_user, update_time) values(md5(uuid()), '1', '74', NULL, NULL, NULL, NULL);
insert into t_role_menu (id, role_id, menu_id, create_user, create_time, update_user, update_time) values(md5(uuid()), '1', '105', NULL, NULL, NULL, NULL);
清理 Foundation 页面缓存并刷新,此时包含 “系统管理员” 角色的用户,例如 admin,已经可以正常赋予 “指标” 权限