【BOS基础系统_权限】权限常见问题之-脏数据导致的问题
【问题1】:分配角色报错,分配权限报错等
客户端错误堆栈:
The argument 'id' is invalid. '*******PERMITEM' length:43
解决方法:
1、报错日志中:存在非法id e98bf***************968bPERMITEM 长度为43,合法长度应该为44,应该是老的版本的遗留数据。
2、select * from T_pm_permitem where fid = 'e98bf***************968bPERMITEM' 查询不到数据
3、根据错误堆栈找到代码中执行的sql,根因在于表T_pm_userorgperm(或者t_pm_roleperm)中存在FpermitemID为上面非法id
(select * from T_pm_userorgperm where fpermitemId = 'e98bf***************968bPERMITEM' ;
select * from t_pm_roleperm where fpermitemId = 'e98bf***************968bPERMITEM')
4、同步权限项,确认一下权限项元数据中是否存在该权限项,同步之后发现该权限项依然查不到。
5、备份T_pm_userorgperm数据: select * into T_pm_userorgperm20200427 from T_pm_userorgperm;同理如果是t_pm_roleperm,就备份t_pm_roleperm的数据
6、删除脏数据:delete from T_pm_userorgperm where fpermitemId = 'e98bf***************968bPERMITEM'或者delete from t_pm_roleperm where fpermitemId = 'e98bf***************968bPERMITEM'
【问题2】:分配权限系统树缺失(给用户分配权限时,界面看不到权限项菜单树)
可能存在多根节点,无法加载树。
排查方法:
1、去【子系统树设置】选择权限项,查看客户化树是否正常,如果正常则点保存,如果有大量缺失,就把标准树移过去保存。
2、在客户端同步权限项之后看树是否会丢失,如果丢失,则需排查T_PM_PERMITEM表中是否存在脏数据
3、select * from T_pm_permitem where fparentId is null 查看根节点的权限项数据是否只有一条,如果有超过1条,则为脏数据,目前权限项树只允许有一个根节点。其脏数据产生原因可能为二开权限项有不规范导致。
4、备份t_pm_permitem:select * into t_pm_permitem2020xxx from t_pm_permitem
5、删除脏数据:delete from T_pm_permitem where fparentId is null
6、客户端同步权限项再观察
推荐阅读