Show TOC Anfang des Inhaltsbereichs

Berechtigungsprüfungen  Dokument im Navigationsbaum lokalisieren

Für Berechtigungsprüfungen können Berechtigungsobjekte im SAP-System in vielfältiger Weise mit Benutzeraktionen verknüpft werden. Im folgenden werden drei Möglichkeiten im Rahmen der ABAP-Programmierung gezeigt.

Berechtigungsprüfung für Transaktionen

Berechtigungsobjekte können im direkt mit Transaktionscodes verknüpft werden. Dabei können in der Transaktionspflege Werte für die Felder des Berechtigungsobjekts angegeben werden. Vor Ausführung der Transaktion werden diese Werte mit den Werten im Benutzerstammsatz verglichen und die Transaktion wird nur bei entsprechender Berechtigung gestartet.

Berechtigungsprüfung für ABAP-Programme

Für ABAP-Programme gibt es die Berechtigungsobjekte S_DEVELOP (Programmentwicklung und Programmausführung) und S_PROGRAM (Programmpflege). Diese enthalten ein Feld P_GROUP, das mit dem Programmattribut Berechtigungsgruppe verknüpft ist. Berechtigungen für einzelne ABAP-Programme können programmgruppenspezifisch an Benutzer vergeben werden.

Berechtigungsprüfung in ABAP-Programmen

Für eine differenzierte selbstprogrammierte Berechtigungsprüfung, benötigt man die Anweisung AUTHORITY-CHECK. Sie erlaubt es, die Einträge im Benutzerstammsatz zu bestimmten Berechtigungsobjekten programmintern gegen beliebige Werte zu überprüfen. Wenn also eine Transaktion oder ein Programm selber nicht genügend geschützt sind oder nicht jeder zur Programmausführung berechtigte Benutzer auch alle Aktionen ausführen darf, muss diese Anweisung verwendet werden:

AUTHORITY-CHECK OBJECT object
                        ID name1 FIELD f1
                        ID name2 FIELD f2
                        ...
                        
ID namen FIELD fn.

Dabei ist object der Name eines Berechtigungsobjekts. Mit name1, name2 ... müssen alle Felder des Berechtigungsobjekts object aufgeführt werden. Mit f1, f2 ... werden die Werte angegeben, die gegen die Einträge in der zugehörigen Berechtigung im Benutzerstammsatz überprüft werden sollen. Die Anweisung sucht im Benutzerprofil nach dem angegebenen Objekt und überprüft die Berechtigungen des Benutzers für alle Werte f1, f2 ... hat. Die Überprüfung eines Felds name1, name2 ... kann übergangen werden, in dem der Ausdruck FIELD f1  FIELD f2 durch DUMMY ersetzt wird.

Hinter dem Zusatz FIELD kann immer nur ein elementares Feld angegeben werden, keine Selektionstabelle. Es stehen aber entsprechende Funktionsbausteine zur Verfügung, welche die Anweisung AUTHORITY-CHECK für alle Werte von Selektionstabellen durchführen. Die Anweisung AUTHORITY-CHECK ist durch ein Anweisungsmuster unterstützt.

Nur falls der Benutzer alle Berechtigungen hat wird der Rückgabewert sy-subrc von der Anweisung AUTHORITY-CHECK auf 0 gesetzt. Wichtige Rückgabewerte sind:

·        0: Der Anwender hat eine Berechtigung mit allen geforderten Werten.

·        4: Der Anwender hat die Berechtigung nicht.

·        8: Die Anzahl der angegebenen Felder stimmt nicht.

·        12: Das angegebene Berechtigungsobjekt ist nicht vorhanden.

Eine Liste aller möglichen Rückgabewerte findet sich in der ABAP-Schlüsselwortdokumentation. Der Inhalt von sy-subrc muss genau untersucht werden, um das Resultat der Berechtigungsprüfung festzustellen und um entsprechend zu reagieren.

Beispiel

REPORT demo_authorithy_check.

PARAMETERS pa_carr LIKE sflight-carrid.
DATA wa_flights LIKE demo_focc.

AT SELECTION-SCREEN.

  AUTHORITY-CHECK OBJECT 'S_CARRID'
                  ID 'CARRID' FIELD pa_carr
                  ID 'ACTVT' FIELD '03'.

  IF sy-subrc = 4.
    MESSAGE e045(sabapdocu) WITH pa_carr.
  ELSEIF sy-subrc <> 0.
    MESSAGE e184(sabapdocu) WITH text-010.
  ENDIF.

START-OF-SELECTION.

  SELECT  carrid connid fldate seatsmax seatsocc
    FROM  sflight
    INTO  CORRESPONDING FIELDS OF wa_flights
    WHERE carrid = pa_carr.

    WRITE: / wa_flights-carrid,
             wa_flights-connid,
             wa_flights-fldate,
             wa_flights-seatsmax,
             wa_flights-seatsocc.

  ENDSELECT.

In diesem Beispiel wird mit dem Berechtigungsobjekt S_CARRID überprüft, ob der Anwender eine Anzeigeberechtigung (03) für die auf dem Selektionsbild eingegebene Fluggesellschaft hat. Falls dies nicht der Fall ist, oder falls ein anderer Fehler auftritt, verzweigt die Selektionsbildverarbeitung zur Anzeige des Selektionsbilds zurück.

Ende des Inhaltsbereichs