我有一个带有以下选择屏幕的自定义报告。允许用户在执行报告时输入值范围。
我想对用户输入的内容进行授权检查。
为此,我在用户和选择字段中使用AUTHORITY-CHECK OBJECT
;
AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
FOR USER sy-uname
ID 'BUKRS' FIELD pnpbukrs-low
.
pnpbukrs 是用户输入的选择字段。
如何正确检查用户可能给出的所有可能组合?
当我直接提供 pnpbukrs 字段时,会在auth中考虑选择字段中的“选项”。检查错误。
当我使用 pnpbukrs-low 时,身份验证中仅使用一个值。检查绕过检查。
答案 0 :(得分: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.
PS#1:如果目标只是从给定表中选择授权数据,则可以使用the class CL_AUTH_OBJECTS_TO_SQL
(> = 7.50)
PS#2:对于AUTHORITY-CHECK
,提及FOR USER sy-uname
是毫无用处的,因为它是默认设置。
答案 1 :(得分:4)
适用于包含任何数据的范围
仅用于填充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