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

时间:2019-03-04 05:01:04

标签: sap 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 时,身份验证中仅使用一个值。检查绕过检查。

2 个答案:

答案 0 :(得分:5)

如果选择表包含通用条目,区间,排除的条目或排除的区间,则应首先获取与选择表相对应的公司列表(使用WHERE ... IN selectiontableIN将处理所有这些过滤器),然后对每个真实的公司进行权限检查。

例如,我假设要从表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是毫无用处的,因为它是默认设置。

答案 1 :(得分:4)

适用于包含任何数据的范围

@Sandra Rossi answer

仅用于填充library(mailR) library(rJava) png(file.path(getwd(), "FILEPATH.png", "img.png")); plot(0); dev.off() send.mail(from = "EMAIL@gmail.com", to = "EMAIL@gmail.com", subject = "Image TEST", body = '<img src="../img.png">', html = TRUE, inline = TRUE, smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "EMAIL@gmail.com", passwd = "PASSWORD", ssl = TRUE), authenticate = TRUE, send = TRUE) 组件的范围:

尝试遍历select-options字段并为每次迭代进行权限检查:

LOW