提单案例:R20200518-2266
问题现象:
远程查看问题现象:
1、EAS特殊数据权限界面点击二开单据右边没有反审核权限项,其他权限项都有
2、在BIM开发工具检查反审核权限项与其他二开权限项元数据定义的区别,有绑定单据实体,开启了数据权限,等都无问题。
分析过程:
1、查看特殊数据权限界面初始化时的代码(包含查询单据关联的权限项逻辑)
1.1 方法全名:com.kingdee.eas.base.permission.app.SpecialDataPermControllerBean._initData(Context, IObjectPK)
1.2 经过走读代码逻辑得知:
特殊数据权限配置文件:{EAS_HOME}\server\profiles\server*\config\EAS_PermissionConfiguration.xml
记录特殊数据权限配置文件修改记录的文件:{EAS_HOME}\server\profiles\server*\config\specialpermlastloadtime.txt
如果为true:
则重新初始化当前CU下的特殊数据权限数据com.kingdee.eas.base.permission.app.SpecialDataPermControllerBean.initDataByCU(Context, IObjectPK)
注意:初始化的流程:
1、删除当前CU下的t_pm_specialDataPermEntry(特殊数据权限实体表)数据
2、删除当前CU下的t_pm_specialDataPerm(特殊数据权限表)数据
3、将EAS_PermissionConfiguration.xml中的所有可用bostype和内存中的当前CU下的特殊数据权限数据关联插入到T_PM_SpecialDataPerm
4、 将T_PM_PERMITEM(权限项表)中(enableDataPermission =1 and operationType <> 'ADDNEW' and objectType in ‘EAS_PermissionConfiguration.xml文件中的可用bostype’)的权限项
关联插入T_PM_SpecialDataPermEntry中。
5、此时我们定义的权限项绑定实体的数据才真正插入到T_PM_SpecialDataPermEntry中,这样下次查询的时候不需要初始化也能查到单据绑定的权限项了。
总结:
1、通过走读这块代码,了解到之前给二开权限项绑定了单据实体然后为了做特殊数据权限修改了 EAS_PermissionConfiguration.xml, 这一切都没有问题,这些权限项和实体的关系数据都会重新初始化一次;但是如果后来新加了一个权限项,也绑定了实体,此时你在特殊数据权限界面是查不到该单据关联的该权限项,因为没有重新初始化,T_PM_SpecialDataPerm,T_PM_SpecialDataPermEntry的数据没有更新。
2、以上分析可知:做特殊数据权限目前建议先将所有权限项元数据定义好,再去修改EAS_PermissionConfiguration.xml添加配置,否则后面新加的权限项是不能绑定到特殊数据权限实体的。
3、目前解决方法:上EAS服务器路径,将{EAS_HOME}\server\profiles\server*\config\specialpermlastloadtime.txt中的false改成true,或者将该文件删除,下一次进入特殊数据权限界面必定会重新初始化特殊数据权限实体相关表数据。
注:理清T_PM_SpecialDataPerm 与 T_PM_SpecialDataPermEntry ,T_Pm_permitem 的关系之后,可以通过以下sql 查询特殊数据权限表中的实体关联了哪些权限项,如果没有关联你要的权限项数据,即需要做步骤3操作来解决。
SELECT dd.FBIZOBJECT ,pp.FALIAS_L2 FROM T_PM_SpecialDataPerm dd inner join T_PM_SpecialDataPermEntry ee on dd.fid = ee.FSPECIALDATAPERMID INNER JOIN T_Pm_permitem pp on ee.FPERMITEMID =pp.fid order by dd.FID
推荐阅读