abap - 复杂选择字段的权限检查(如 SELECT-OPTIONS)

标签 abap

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

enter image description here

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

为此,我将 AUTHORITY-CHECK OBJECT 与用户和选择字段一起使用;

  AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
  FOR USER sy-uname
  ID 'BUKRS' FIELD pnpbukrs-low
  .

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

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

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

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

最佳答案

如果选择表包含通用条目、区间、排除条目或排除区间,您应该首先获取与选择表相对应的公司列表(使用 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.

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

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

关于abap - 复杂选择字段的权限检查(如 SELECT-OPTIONS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54976886/

相关文章:

abap - 如何让abap程序暂停?

abap - 在主记录中没有匹配记录时插入子记录

abap - 如何从CDPOS表字段TABKEY中提取动态表键到结构中?

abap - 创建条目选项在 SE11 中被禁用。为什么?

sorting - 如何对 "SELECT ... FOR ALL ENTRIES ..."中的行进行排序,不接受 ORDER BY

dynamic - 处理串联表键的通用方法

floating-point - 58.85显示为58.84999999999

azure - 如何在 Azure DataFactory 中设置 SAP ABAP 的集成运行时

java - 在 Java 中编写不带可选参数的可测试代码与在 ABAP OO 中注入(inject)的正确方法

abap - BAPI 是 RICEF 的接口(interface)还是转换工具?