为什么AUTHORITY-CHECK给出的结果与功能模块AUTHORITY_CHECK不同?

2020-08-22 16:01发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们有时对具有活动性'03'(或...

         点击此处--->   EasySAP.com群内免费提供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)
7条回答
野沐沐
2020-08-22 16:50 .采纳回答

TL; DR

AUTHORITY-CHECK(ABAP语句)的摘要=在AUTHORITY_CHECK(功能模块)中未提及授权字段。

长版本

在7.52中,如果未传递参数USER(或将其设置为SY-UNAME),则功能模块AUTHORITY_CHECK的代码严格等于:

权限检查对象object
           id field1字段value1
           id field2字段value2
           id field3字段value3
           id field4字段value4
           id field5字段value5
           id field6字段value6
           id field7字段value7
           id field8字段value8
           id field9字段value9
           id field10字段value10。
 

因此,您可以假定AUTHORITY-CHECK没有任何区别。

您的代码的主要区别在于DUMMY。 如果您将参数设置为'DUMMY'调用AUTHORITY_CHECK,则等效于:

 AUTHORITY-CHECK OBJECT'S_DEVELOP'
            ID" DEVCLASS"字段" DUMMY"
            ID" OBJTYPE"字段" DUMMY"
            ID" OBJNAME"字段" DUMMY"
            ID" P_GROUP"字段" DUMMY"
            ID'ACTVT'字段'03'。

,这意味着必须至少有一个授权,其中DEVCLASS字段与'DUMMY'相匹配,而OBJTYPE字段与'DUMMY'相匹配,等等。 这根本不等于您的要求:

权限检查对象" S_DEVELOP"
            ID" DEVCLASS"假人
            ID" OBJTYPE"假人
            ID" OBJNAME" DUMMY
            ID'P_GROUP'DUMMY
            ID'ACTVT'字段'03'。

严格等同于:

权限检查对象'S_DEVELOP'
            ID" ACTVT"字段" 03"。
 

或者甚至更不直观(因为它不在ABAP文档中,因此也不太正式,但是可以从SAP注释 1022413-使AUTHORITY-CHECK和AUTHORITY_CHECK保持一致,"从AUTHORITY_CHECK代码中调用函数模块AUTHORITY_CHECK时可以实现相同的结果",以:

权限检查对象" S_DEVELOP"
            ID``领域''
            ID``领域''
            ID``领域''
            ID``领域''
            ID" ACTVT"字段" 03"。
 

因此,您的要求严格等于:

呼叫功能'AUTHORITY_CHECK'
   出口
     对象='S_DEVELOP'
     field1 ='ACTVT'
     value1 ='03'。

调用函数" AUTHORITY_CHECK"
   出口
     对象='S_DEVELOP'
     field5 ='ACTVT'
     value5 ='03'。

甚至:

呼叫功能'AUTHORITY_CHECK'
   出口
     对象='S_DEVELOP'
     field1 =''
     value1 =''
     field2 =''
     value2 =''
     field3 =''
     value3 =''
     field4 =''
     value4 =''
     field5 ='ACTVT'
     值5 ='03'。

NB:下一个错误,因为它查找包含包含真实空间值('')的字段的授权:

 AUTHORITY-CHECK OBJECT'  S_DEVELOP'
            ID'DEVCLASS'字段''
            ID'OBJTYPE'字段''
            ID'OBJNAME'字段''
            ID'P_GROUP'字段''
            ID" ACTVT"字段" 03"。

一周热门 更多>