复杂选择字段的权限检查(如 SELECT-OPTIONS)
AUTHORITY-CHECK for complex selection field (like SELECT-OPTIONS)
我有一个带有以下选择屏幕的自定义报告。它允许用户在执行报表时输入值范围。
我想对用户输入的内容进行授权检查。
为此,我将 AUTHORITY-CHECK OBJECT
与用户和选择字段一起使用;
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
FOR USER sy-uname
ID 'BUKRS' FIELD pnpbukrs-low
.
其中 pnpbukrs 是用户输入的选择字段。
如何正确检查用户可能给出的所有可能组合?
当我提供直接 pnpbukrs 字段时,选择字段中的选项在 auth 中被考虑。检查给出的错误。
当我使用 pnpbukrs-low 时,授权中只使用了一个值。检查绕过检查。
对于任何数据的范围
争取
对于仅用 LOW
组件填充的范围:
尝试遍历 select-options 字段并对每次迭代进行权限检查:
LOOP AT pnpbukrs ASSIGNING FIELD-SYMBOL(<line>).
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
FOR USER sy-uname
ID 'BUKRS'
FIELD <line>-low.
ENDLOOP.
如果selection table包含通用条目、区间、排除条目或排除区间,您应该首先获取对应于selection的公司列表table(使用 WHERE ... IN selectiontable
;IN
将处理所有这些类型的过滤器),然后对每个真实公司进行权限检查。
例如,我假设这些公司取自 table 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:如果目标只是 select 来自给定 table 的授权数据,您可以使用 (>= 7.50)
PS #2:对于AUTHORITY-CHECK
,提到FOR USER sy-uname
是没有用的,因为它是默认设置。
我有一个带有以下选择屏幕的自定义报告。它允许用户在执行报表时输入值范围。
我想对用户输入的内容进行授权检查。
为此,我将 AUTHORITY-CHECK OBJECT
与用户和选择字段一起使用;
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
FOR USER sy-uname
ID 'BUKRS' FIELD pnpbukrs-low
.
其中 pnpbukrs 是用户输入的选择字段。
如何正确检查用户可能给出的所有可能组合?
当我提供直接 pnpbukrs 字段时,选择字段中的选项在 auth 中被考虑。检查给出的错误。
当我使用 pnpbukrs-low 时,授权中只使用了一个值。检查绕过检查。
对于任何数据的范围
争取
对于仅用 LOW
组件填充的范围:
尝试遍历 select-options 字段并对每次迭代进行权限检查:
LOOP AT pnpbukrs ASSIGNING FIELD-SYMBOL(<line>).
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
FOR USER sy-uname
ID 'BUKRS'
FIELD <line>-low.
ENDLOOP.
如果selection table包含通用条目、区间、排除条目或排除区间,您应该首先获取对应于selection的公司列表table(使用 WHERE ... IN selectiontable
;IN
将处理所有这些类型的过滤器),然后对每个真实公司进行权限检查。
例如,我假设这些公司取自 table 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:如果目标只是 select 来自给定 table 的授权数据,您可以使用
PS #2:对于AUTHORITY-CHECK
,提到FOR USER sy-uname
是没有用的,因为它是默认设置。