BAdI HRPAD00AUTH_CHECK untuk pengecekan otorisasi saat akses Infotype

BAdI ini bisa digunakan untuk pengecekan otorisasi terhadap user saat mengakses infotype dan HR master data, baik saat membuka Tcode PA20/PA30 ataupun saat memanggil FM yang berkaitan dengan HR infotype, seperti HR_READ_INFOTYPE.

Bila BAdI ini aktif, maka standard pengecekan otorisasi SAP akan ke-replace dengan BAdI ini. Jadi harus hati-hati saat mengaktifkan BAdI ini. Sangat disarankan pada setiap method selalu memanggil otorisasi standard SAP terlebih dahulu dengan nama yang sama dengan nama methodnya.

BAdI ini biasanya terpaksa diaktifkan apabila ada kebutuhan dari user untuk mengurangi atau menambah otorisasi user di luar scope SAP standard. Sebagai contoh adanya kebutuhan user tertentu untuk dapat melihat data yang hanya satu company code dengan user tersebut sesuai dengan profile-nya. Atau kebutuhan untuk menambah otorisasi user tertentu agar bisa melihat data pekerja di luar company code user tersebut.

Berikut ini adalah step yang bisa dijalankan agar aman damai sentosa saat mengaktifkan BAdI ini.

  1. Buka Tcode SPRO, masuk ke menu Personnel Management >> Personnel Administration >> Tools >> Authorization Management >> BAdI: Set Up Customer-Specific Authorization Check. Create new BAdI dengan prefix Z di sini.
  2. Setelah create new BAdI, masuk ke Tcode SE19 dan Edit Implementation Classic BAdI dengan nama BAdI yg baru saja dibuat.
  3. Pada tab interface, double klik di kolom ‘Name of Implementing Class’. Tambahkan Attributes
    SAP_STANDARD_AUTH dengan TYPE REF TO CL_HRPAD00_CHECK_STD

    Dengan menambahkan class attribute ini, otorisasi standard SAP bisa dipanggil dalam BAdI nanti.

  4. Kembali ke tab interface. Double klik method Delayed_Constructur dan tambahkan line code berikut :
    CREATE OBJECT sap_standard_auth.
  5. Pada method SET_ORG_ASSIGNMENT, tambahkan line code berikut :
      IF sap_standard_auth IS INITIAL.
        CREATE OBJECT sap_standard_auth.
      ENDIF.
    
      CALL METHOD sap_standard_auth->if_ex_hrpad00auth_check~set_org_assignment
        EXPORTING
          tclas          = tclas
          p0001_tab      = p0001_tab
        EXCEPTIONS
          invalid        = 1
          internal_error = 2
          OTHERS         = 3.
    
      IF sy-subrc = 1.
        RAISE invalid.
      ELSEIF sy-subrc = 2.
        RAISE internal_error.
      ENDIF.
  6. Pada method SET_PARTIAL_ORG_ASSIGNMENT, tambahkan line code berikut :
      IF sap_standard_auth IS INITIAL.
        CREATE OBJECT sap_standard_auth.
      ENDIF.
    
      CALL METHOD sap_standard_auth->if_ex_hrpad00auth_check~set_partial_org_assignment
        EXPORTING
          tclas          = tclas
          p0001          = p0001
          fieldlist      = fieldlist
        EXCEPTIONS
          invalid        = 1
          internal_error = 2
          OTHERS         = 3.
    
      IF sy-subrc = 1.
        RAISE invalid.
      ELSEIF sy-subrc = 2.
        RAISE internal_error.
      ENDIF.
  7. Pada method lainnya, tambahkan line code berikut :
      IF sap_standard_auth IS INITIAL.
        CREATE OBJECT sap_standard_auth.
      ENDIF.
    
      CALL METHOD sap_standard_auth->if_ex_hrpad00auth_check~check_max_infty_authorization
        EXPORTING
          level          = level
          tclas          = tclas
          infty          = infty
          uname          = uname
        IMPORTING
          is_authorized  = is_authorized
        EXCEPTIONS
          internal_error = 1
          invalid        = 2
          OTHERS         = 3.
    
      IF sy-subrc = 1.
        RAISE invalid.
      ELSEIF sy-subrc = 2.
        RAISE internal_error.
      ENDIF.

    Ubah font berwarna merah dengan nama dari masing-masing method. Misal pada method CHECK_MAX_SUBTY_AUTHORIZATION diganti dengan nama check_max_subty_authorization. Lakukan hal yang sama untuk method :

    1. CHECK_MAX_INFTY_AUTHORIZATION
    2. CHECK_MAX_LEVEL_AUTHORIZATION
    3. CHECK_MAX_SUBTY_AUTHORIZATION
    4. CHECK_MIN_INFTY_AUTHORIZATION
    5. CHECK_MIN_LEVEL_AUTHORIZATION
    6. CHECK_MIN_SUBTY_AUTHORIZATION
    7. CHECK_AUTHORIZATION
    8. CHECK_MAX_PERNR_AUTHORIZATION
    9. CHECK_MIN_PERNR_AUTHORIZATION
    10. CHECK_PERNR_AUTHORIZATION
  8. Penambahan logic pengecekan otorisasi sesuai kebutuhan user di method CHECK_AUTHORIZATION setelah memanggil method otorisasi standard SAP dan tepat sebelum line code ENDMETHOD. Dalam contoh di sini saya coba melakukan pengecekan apakah user tertentu mempunya otorisasi terhahap object autorization Z*, bila iya maka user tersebut dapat mengakses data pekerja yang diinginkan walaupun secara standard otorisasi user ini tidak punya otorisasi untuk mengakses data pekerja tersebut.
    METHOD if_ex_hrpad00auth_check~check_authorization.
    
      IF sap_standard_auth IS INITIAL.
        CREATE OBJECT sap_standard_auth.
      ENDIF.
    
      CALL METHOD sap_standard_auth->if_ex_hrpad00auth_check~check_authorization
        EXPORTING
          level                       = level
          tclas                       = tclas
          pernr                       = pernr
          infty                       = infty
          subty                       = subty
          begda                       = begda
          endda                       = endda
          uname                       = uname
          process_only_partial_checks = process_only_partial_checks
        IMPORTING
          is_authorized               = is_authorized
        EXCEPTIONS
          invalid                     = 1
          internal_error              = 2
          OTHERS                      = 3.
    
      IF sy-subrc = 1.
        RAISE invalid.
      ELSEIF sy-subrc = 2.
        RAISE internal_error.
      ENDIF.
    
      IF is_authorized NE 'X'.
        DATA: ls_paXXXX TYPE paXXXX.
        SELECT SINGLE * FROM paXXXX INTO ls_paXXXX
          WHERE pernr = pernr AND
                subty = '0' AND
                begda LE endda AND
                endda GE begda.
        IF sy-subrc = 0.
          AUTHORITY-CHECK OBJECT 'ZPXXXX'
                   ID 'ACTVT' FIELD '03'
                   ID 'BURKS' FIELD ls_paXXXX-bukrs.
          IF sy-subrc = 0.
            is_authorized = 'X'.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDMETHOD.
    
  9. Activate BAdI dan pastikan bahwa BAdI ini dipanggil (lihat kolom Runtime Behavior = Implementation will be called).

Silahkan mencoba.

Referensi :
http://scn.sap.com/community/security/blog/2010/08/17/badi-hrpad00authcheck-implementation–hr-security-enhancements-in-sap-standard
http://help.sap.com/saphelp_erp2004/helpdata/en/b8/bdb83b5b831f3be10000000a114084/content.htm

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s