AUTHORITY-CHECK для сложного поля выбора (например, SELECT-OPTIONS) - PullRequest
0 голосов
/ 04 марта 2019

У меня есть пользовательский отчет со следующим экраном выбора.Он позволяет пользователю вводить диапазоны значений при выполнении отчета.

enter image description here

Я хочу выполнить проверку авторизации для введенных пользователем данных.

Для этого я использую AUTHORITY-CHECK OBJECT с пользователем и полем выбора;

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

Где pnpbukrs - это поле выбора, введенное пользователем.

Как правильно выполнить эту проверку для всех возможных комбинаций, которые может дать пользователь?

Когда я предоставляю поле direct pnpbukrs , параметры в поле выбора рассматриваются ваутентификацияпроверьте выдачу ошибок.

Когда я использую pnpbukrs-low , в аутентификации используется только одно значение.проверка делает обход обхода.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

В случае, если таблица выбора содержит общие записи, интервалы, исключенные записи или исключенные интервалы, вы должны сначала получить список компаний, соответствующих таблице выбора (с помощью 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: Если цель состоит только в том, чтобы выбрать авторизованные данные из данной таблицы, вы можете использовать класс CL_AUTH_OBJECTS_TO_SQL (> = 7.50)

PS # 2: для AUTHORITY-CHECK бесполезно упоминать FOR USER sy-uname, так как это настройка по умолчанию.

0 голосов
/ 04 марта 2019

Для диапазона с любыми данными

Перейти для @ Сандра Росси ответ

Для диапазона, заполненного только компонентом 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.
...