abapGit/src/objects/zcl_abapgit_object_auth.clas.abap
Marc Bernard 6f0dfc5a81
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Fix extended check issues - Part 2 (#7087)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-03 07:21:05 +01:00

194 lines
4.6 KiB
ABAP

CLASS zcl_abapgit_object_auth DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
METHODS constructor
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras
!io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
!io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
DATA: mv_fieldname TYPE authx-fieldname.
ENDCLASS.
CLASS zcl_abapgit_object_auth IMPLEMENTATION.
METHOD constructor.
super->constructor(
is_item = is_item
iv_language = iv_language
io_files = io_files
io_i18n_params = io_i18n_params ).
mv_fieldname = ms_item-obj_name.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
* looks like "changed by user" is not stored in the database
rv_user = c_user_unknown.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
" there is a bug in SAP standard, the TADIR entries are not deleted
" when the AUTH object is deleted in transaction SU20
" FM SUSR_AUTF_DELETE_FIELD calls the UI, therefore we reimplement its logic
DATA:
lt_objlst TYPE susr_t_xuobject,
lo_auth TYPE REF TO cl_auth_tools.
" authority check
CREATE OBJECT lo_auth.
IF lo_auth->authority_check_suso( actvt = '06'
fieldname = mv_fieldname ) <> 0.
MESSAGE e463(01) WITH mv_fieldname INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
" if field is used check
lt_objlst = lo_auth->suso_where_used_afield( mv_fieldname ).
IF lt_objlst IS NOT INITIAL.
MESSAGE i453(01) WITH mv_fieldname INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
" collect fieldname into a transport task
IF lo_auth->add_afield_to_trkorr( mv_fieldname ) <> 0.
"no transport -> no deletion
MESSAGE e507(0m) INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
DELETE FROM authx WHERE fieldname = mv_fieldname.
IF sy-subrc <> 0.
MESSAGE e507(0m) INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
* see include LSAUT_FIELDF02
DATA: ls_authx TYPE authx,
lo_auth TYPE REF TO cl_auth_tools.
io_xml->read( EXPORTING iv_name = 'AUTHX'
CHANGING cg_data = ls_authx ).
tadir_insert( iv_package ).
CREATE OBJECT lo_auth.
IF lo_auth->add_afield_to_trkorr( ls_authx-fieldname ) <> 0.
zcx_abapgit_exception=>raise( 'Error deserializing AUTH' ).
ENDIF.
MODIFY authx FROM ls_authx.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error deserializing AUTH' ).
ENDIF.
CALL FUNCTION 'DB_COMMIT'.
lo_auth->set_authfld_info_from_db( ls_authx-fieldname ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
SELECT SINGLE fieldname FROM authx
INTO mv_fieldname
WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_order.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
IF zcl_abapgit_factory=>get_function_module( )->function_exists( 'SU20_MAINTAIN_SNGL' ) = abap_true.
" this function module does not exist in 740
CALL FUNCTION 'SU20_MAINTAIN_SNGL'
EXPORTING
id_field = mv_fieldname
id_wbo_mode = abap_false ##EXISTS.
rv_exit = abap_true.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~map_filename_to_object.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~map_object_to_filename.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_authx TYPE authx.
SELECT SINGLE * FROM authx INTO ls_authx
WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF
IF sy-subrc <> 0.
RETURN.
ENDIF.
io_xml->add( iv_name = 'AUTHX'
ig_data = ls_authx ).
ENDMETHOD.
ENDCLASS.