今天遇到一个奇怪的问题,PA20的员工编号下面是空白,在信息类型文本中的信息类型后面都是绿色的沟。
原来也遇到过类似的问题,但是尝试几次都没找到解决方案,但是点操作的时候,提示“至少一个记录已被跳过(授权)”,明显就是缺少权限,但是通过SU53去查询的时候不提示缺少权限。
反复去查看数据都没发现问题,仔细查看PA0000与PA0001的数据,没有发现什么异常的数据。没办法只有debug下源代码,分析PA20的权限校验逻辑
1 PS内表中有一个auth字段,代表每行数据是否授权,当PS-AUTH=N表示此行数据无权限。PS内表会汇集多个信息类型的数据。
2 781行开始循环PS表,790行是SAP标准权限校验的函数,此函数会返回AUTH值字段,并在791的modifly中修改。
3 默认每次循环的时候给默认值 PS-AUTH = 'N'.
4 此处是标准权限校验的函数,权限包含普通权限与结构化权限,因为大账号没问题,小账号有问题,小账号没DEBUG权限,所以需要用大账号去模拟小账号的权限,此处的uname就是关键,在用大账号debug的时候uname改成小账号的名称,这样就能模拟小账号的场景。如果没有权限返回值就是-。
5 此函数看到一点提示,
6 这个函数就是处理的关键,根据EXCEPTION中发现,NO_STRU_AUTHORITY,结构化的关键字
7 通过下图的关键字发现,NO_STRU_AUTHORITY,现在恍然大悟,开始检查的权限是PFCG,但是一直没想结构化的权限方向考虑。
8 填充PS表的数据都是W,W标识可写,现在可以把0000与0001的最后一条数据改成N,这样前台界面就无法查询最后一条数据。
9 PS表的AUTH改成N,在PA20中发现数据缺少一条。