复杂选择字段的AUTHORITY-CHECK(如SELECT-OPTIONS)

Isu*_*uru 3 sap abap

我有一个带有以下选择屏幕的自定义报告。它允许用户在执行报告时输入值范围。

在此处输入图片说明

我想对用户输入的输入内容进行授权检查。

为此,我使用AUTHORITY-CHECK OBJECT用户和选择字段。

  AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
  FOR USER sy-uname
  ID 'BUKRS' FIELD pnpbukrs-low
  .
Run Code Online (Sandbox Code Playgroud)

其中pnpbukrs是用户输入的选择字段。

如何正确检查用户可能给出的所有可能组合?

当我提供直接pnpbukrs字段时,auth中将考虑选择字段中的选项。检查给出的错误。

当我使用pnpbukrs-low时,auth中仅使用一个值。检查绕过检查。

San*_*ssi 5

如果选择表包含通用条目,时间间隔,排除的条目或排除的间隔,则应首先获取与选择表相对应的公司列表(使用WHERE ... IN selectiontable; IN将处理所有这些类型的过滤器),然后对每个真正的公司。

例如,我假设要从表中选择公司T001

SELECT bukrs FROM t001 WHERE bukrs IN pnpbukrs INTO TABLE @DATA(companies).

LOOP AT companies ASSIGNING FIELD-SYMBOL(<company>).
  AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
                ID 'BUKRS' FIELD <company>.
  IF sy-subrc <> 0.
    " this company is not authorized, do something
  ENDIF.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

PS#1:如果目标只是从给定表中选择授权数据,则可以使用CL_AUTH_OBJECTS_TO_SQL(> = 7.50)

PS#2:对于AUTHORITY-CHECK,它FOR USER sy-uname是默认设置,因此没有用。