点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我们有时对具有活动性'03'(或'02')的S_DEVELOP使用AUTHORITY-CHECK来控制是否应打开选择屏幕上的字段以供输入:
*只有开发人员可以更改要选择的最大项目数 权限检查对象" S_DEVELOP" ID" DEVCLASS"假人 ID" OBJTYPE"假人 ID" OBJNAME" DUMMY ID'P_GROUP'DUMMY ID" ACTVT"字段" 03"。 IF sy-subrc NE 0。 将屏幕环入数据(ls_screen)。 IF ls_screen-group1 EQ'DEV'。 ls_screen-input ='0'。 从ls_screen修改屏幕。 万一。 结局。 万一。
现在,我们在测试期间遇到了一个案例,该案例中,不是开发人员的用户通过了SY-SUBRC = 0的检查,并且我们不明白为什么会这样,因为我们看不到与开发人员相关的情况 在他的个人资料中扮演的角色。 如果我们通过SE37和功能模块AUTHORITY_CHECK以及ID和FIELD的相应值来检查用户,则将返回预期的错误USER_NOT_AUTHORIZED:
程序和功能模块中的实际权限检查不会产生相同的结果吗? 说实话,我发现他们没有这样做是"令人不安的"! 还是我们错过了什么? 是的,我注意到FM未"发布"。
我试图找到有关此内容的信息,但是在搜索" Authority-check"时找到的许多匹配项确实有点困难!
我们正在使用NW750 EHP8
非常感谢和欢呼
贝尔贝尔
fm-authority-check.jpg (76.3 kB)
TL; DR
AUTHORITY-CHECK(ABAP语句)的摘要=在AUTHORITY_CHECK(功能模块)中未提及授权字段。
长版本
在7.52中,如果未传递参数USER(或将其设置为SY-UNAME),则功能模块AUTHORITY_CHECK的代码严格等于:
因此,您可以假定AUTHORITY-CHECK没有任何区别。
您的代码的主要区别在于DUMMY。 如果您将参数设置为'DUMMY'调用AUTHORITY_CHECK,则等效于:
,这意味着必须至少有一个授权,其中DEVCLASS字段与'DUMMY'相匹配,而OBJTYPE字段与'DUMMY'相匹配,等等。 这根本不等于您的要求:
严格等同于:
或者甚至更不直观(因为它不在ABAP文档中,因此也不太正式,但是可以从SAP注释 1022413-使AUTHORITY-CHECK和AUTHORITY_CHECK保持一致,"从AUTHORITY_CHECK代码中调用函数模块AUTHORITY_CHECK时可以实现相同的结果",以:
因此,您的要求严格等于:
或
甚至:
NB:下一个错误,因为它查找包含包含真实空间值('')的字段的授权:
弗雷德里克·吉罗德
< p> LOL,Fred!还没有尝试过ST01跟踪-IIRC-我们无权运行auth-trace。 但是,我们是通过调试来查看它的,所以我冒昧地猜测我们在正确的程序中。 我认为ABAP代码中的权限检查实际上触发了内核功能,因此FM是一个完全不同的实体。 我只是感到惊讶,无论如何它们都不会给出相同的结果。
由用户执行了哪些交易,可以定义某些交易(和其他对象)以覆盖权限检查, 调用SU24进行交易,然后查看"检查指示器"列,是否有一些授权对象标记为"不检查"? (注意:配置文件参数AUTH/NO_CHECK_IN_SOME_CASES会激活此行为,请使用RZ10或询问基础)。
如果不允许使用ST01,是否还使用SU53(或SU56进行缓冲区分析)进行了检查,以防意外成功
是否在程序发生时进行权限检查? 也许用户在执行程序之前找到了避免这种情况的方法...
Frederic Girod
它是在AT SELECTION-SCREEN OUTPUT中完成的,并且处理了该事件中的其他逻辑,因此也应进行auth-check。 但是,正如下面在我对Raymond的答复中提到的那样,由于在此期间更改了代码,我们无法再进行测试。
Sandra Rossi
感谢您的详细解释,Sandra! 我敢肯定,这不仅对我有帮助,而且对其他人也为微妙的差异感到困惑!
因此,当用户的支票以支票的功能模块版本返回"无授权"时, 原因是因为他没有授权对" DUMMY"进行检查,而不是因为我们认为的活动(或错误地得出结论!)。
干杯
Bärbel
开发人员很少为特定交易输入SU24。 遗憾的是,PFCG在创建角色时会使用除文档角色之外在此输入的信息。
一周热门 更多>