CL_AUTH_OBJECTS_TO_SQL
사용자의 보유 권한으로 SQL 조건문 생성
CBO 프로그램에서 사용자가 보유한 권한에 해당 하는 데이터만 조회하기 위해 기존에는 range를 이용하여 권한이 있는 조직 데이터를 만들어 쿼리문을 처리하였는데,
비교적 간단하게 권한오브젝트에 대해 사용자의 보유권한을 이용하여 조건문을 자동으로 생성해 주는 Class가 있어서 정리해 봤습니다.
권한을 점검하고자 하는 오브젝트와 권한값 을 넣으면 해당하는 조직정보나 문서유형 같은 값들을 SQL 조건문으로 만들어 줍니다.
적절하게 활용하면 CBO 프로그램의 권한 제어에 상당히 효율적으로 보입니다.
# 사용예시
"데이터 조회시 권한 점검 포함
DATA(lv_where_clause) = VALUE string( ).
DATA(lo_auth_check) = cl_auth_objects_to_sql=>create_for_open_sql( ).
lo_auth_check->add_authorization_object(
EXPORTING iv_authorization_object = 'V_VBAK_VKO'
it_activities = VALUE #( ( auth_field = 'ACTVT' value = '03' ) )
it_field_mapping = VALUE #( ( auth_field = 'VKORG'
view_field = VALUE #( table_ddic_name = 'VBAK' table_alias = 'A' field_name = 'VKORG' ) ) ) ).
lo_auth_check->add_authorization_object(
EXPORTING iv_authorization_object = 'F_BKPF_BUK'
it_activities = VALUE #( ( auth_field = 'ACTVT' value = '03' ) )
it_field_mapping = VALUE #( ( auth_field = 'BUKRS'
view_field = VALUE #( table_ddic_name = 'VBAK' table_alias = 'A' field_name = 'BUKRS_VF' ) ) ) ).
lo_auth_check->add_authorization_object(
EXPORTING iv_authorization_object = 'M_MATE_WRK'
* it_activities = VALUE #( ( auth_field = 'ACTVT' value = '03' ) )
it_field_mapping = VALUE #( ( auth_field = 'WERKS'
view_field = VALUE #( table_ddic_name = 'VBAP' table_alias = 'A2' field_name = 'WERKS' ) ) ) ).
TRY.
lv_where_clause = lo_auth_check->get_sql_condition( ).
CATCH cx_auth_not_authorized.
MESSAGE 'No Auth' TYPE 'I' DISPLAY LIKE 'E'.
EXIT.
ENDTRY.
IF lv_where_clause IS INITIAL.
lv_where_clause = @ABAP_TRUE EQ @ABAP_TRUE.
ENDIF.
SELECT
a~vbeln,
a~erdat,
a~erzet,
a~ernam,
a~vkorg,
a~vtweg,
a~vkbur,
a~bukrs_vf,
a2~posnr,
a2~werks,
a2~lgort,
a2~matnr,
a2~arktx
FROM vbak AS a
INNER JOIN vbap AS a2 ON a~vbeln EQ a2~vbeln
INNER JOIN t001 AS b ON a~bukrs_vf EQ b~bukrs
INNER JOIN t001w AS c ON a2~werks EQ c~werks
WHERE (lv_where_clause) "권한이 있는 필드값을 조건문에 추가
AND a~vkorg IN @s_vkorg
AND b~bukrs EQ @p_bukrs
AND c~werks IN @s_werks
AND a~erdat IN @s_erdat
INTO TABLE @DATA(lt_result).
cl_demo_output=>new(
)->next_section( '보유한 권한에 따라 아래 조건문으로 데이터가 필터링 됩니다' )->write( lv_where_clause
)->next_section( '조회 결과' )->write( lt_result
)->display( ).
'ABAP > Function|Class' 카테고리의 다른 글
[Class] CL_SALV_TABLE - SALV 제어 (2) | 2024.10.31 |
---|---|
[Class] CL_GUI_TEXTEDIT (0) | 2024.10.24 |
[Function] POPUP_GET_VALUES_DB_CHECKED - 필드값 입력 팝업 (0) | 2023.12.18 |
[Function] POPUP_GET_VALUES - 필드값 입력 팝업 (0) | 2023.12.18 |
[Class] SUBMIT으로 ALV 데이터 조회 - CL_SALV_BS_RUNTIME_INFO (1) | 2023.12.04 |
댓글