SAP Berechtigungsprüfung in ABAP: AUTHORITY-CHECK verstehen

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die AUTHORITY-CHECK-Anweisung ist der zentrale Befehl in ABAP, um Berechtigungsprüfungen durchzuführen. Mit dieser Anweisung überprüfst Du zur Laufzeit, ob der aktuell angemeldete Benutzer die notwendigen Berechtigungen hat, um eine bestimmte Aktion auszuführen oder auf bestimmte Daten zuzugreifen.

Das SAP-System prüft dabei, ob die im Programmcode angeforderten Berechtigungen (definiert durch ein Berechtigungsobjekt und spezifische Feldwerte) mit den Berechtigungen übereinstimmen, die dem Benutzer über seine Rollen im Benutzerstammsatz (Transaktion SU01, Rollenpflege PFCG) zugewiesen wurden.

Konzept im Hintergrund (Kurz)

  • Berechtigungsobjekte (SU21): Gruppieren bis zu 10 Berechtigungsfelder, die zusammen eine bestimmte Berechtigung definieren (z. B. Objekt F_BKPF_BUK für Buchhaltungsbelege pro Buchungskreis, mit Feldern BUKRS (Buchungskreis) und ACTVT (Aktivität)).
  • Berechtigungsfelder: Die einzelnen Kriterien innerhalb eines Objekts (z. B. ACTVT für Aktivität wie Anzeigen ’ 03’, Ändern ‘02’, Anlegen ‘01’).
  • Berechtigungen: Konkrete Ausprägungen im Benutzerstamm, die erlaubte Werte oder Muster für die Felder eines Objekts definieren (z. B. darf Benutzer Müller im Objekt F_BKPF_BUK die Aktivität ‘03’ für Buchungskreis ‘1000’ ausführen).
  • AUTHORITY-CHECK: Vergleicht die im Code angeforderten Feld-Werte mit den im Benutzerstamm hinterlegten Berechtigungen für das angegebene Objekt.

Syntax

AUTHORITY-CHECK OBJECT '<Berechtigungsobjekt>'
ID '<Feldname1>' FIELD <Wert1>
ID '<Feldname2>' FIELD <Wert2>
...
[ID '<FeldnameX>' DUMMY]. " Optional
" Unmittelbar nach der Prüfung MUSS sy-subrc ausgewertet werden:
IF sy-subrc = 0.
" Prüfung erfolgreich - Benutzer hat die Berechtigung(en).
" Führe den geschützten Code aus...
ELSE.
" Prüfung fehlgeschlagen (sy-subrc <> 0) - Benutzer hat KEINE Berechtigung.
" Gib eine Fehlermeldung aus, verlasse die Verarbeitung, etc.
ENDIF.
  • OBJECT '<Berechtigungsobjekt>': (Obligatorisch) Der Name des Berechtigungsobjekts (aus SU21) als Zeichenliteral, gegen das geprüft wird (z. B. 'S_TCODE', 'F_BKPF_BUK', 'S_CARRID').
  • ID '<Feldname>' FIELD <Wert>: (Mindestens ein ID-Zusatz, außer bei ausschließlicher Verwendung von DUMMY) Definiert ein Berechtigungsfeld des Objekts (z. B. 'TCD', 'BUKRS', 'ACTVT') und den Wert (eine Variable oder ein Literal), auf den die Berechtigung des Benutzers geprüft werden soll. Du musst normalerweise für alle Felder des Objekts, die für Deine Prüfung relevant sind, einen ID/FIELD-Zusatz angeben.
  • ID '<Feldname>' DUMMY: (Optional) Statt eines konkreten Wertes wird hier nur geprüft, ob der Benutzer irgendeine Berechtigung für dieses Feld im Kontext des Objekts besitzt. Dies wird manchmal verwendet, um zu prüfen, ob ein Objekt überhaupt im Benutzerprofil vorhanden ist, oder um z. B. auf eine Aktivität zu prüfen, ohne diese festzulegen (obwohl die Prüfung mit konkretem ACTVT-Wert üblicher ist). Wenn nur DUMMY-Felder geprüft werden, prüft man im Grunde nur, ob der Benutzer das Objekt überhaupt in seinen Profilen hat.

Systemfeld sy-subrc (Das Ergebnis der Prüfung)

Das Ergebnis des AUTHORITY-CHECK musst Du immer direkt danach im Systemfeld sy-subrc prüfen:

  • sy-subrc = 0: Erfolg! Der Benutzer hat die angeforderte Berechtigung.
  • sy-subrc = 4: Keine Berechtigung. Dem Benutzer fehlt die passende Berechtigung für die geprüfte Kombination.
  • sy-subrc = 12: Kein Profil vorhanden. Der Benutzer hat kein Profil, das das geprüfte Berechtigungsobjekt enthält.
  • sy-subrc = 8: Berechtigung unvollständig (selten, tritt auf, wenn für weniger Felder eine Berechtigung existiert, als im Check angegeben wurden).
  • Andere Werte (16, 24, 28, 32, 36): Zeigen technische Probleme an (Benutzerpuffer fehlerhaft, Feldname im Check falsch, Objekt nicht im System etc.).

=> In der Praxis prüfst Du meist auf sy-subrc = 0 für Erfolg und behandelst alle anderen Fälle (sy-subrc <> 0 oder sy-subrc >= 4) als “Berechtigung fehlt”.

Wo und Wann verwenden?

  • Bevor Du dem Benutzer erlaubst, eine kritische Aktion auszuführen (Daten ändern, löschen, spezielle Programme starten).
  • Bevor Du sensible Daten anzeigst.
  • Wenn der Zugriff auf Daten oder Funktionen auf bestimmte Organisationseinheiten (Buchungskreis, Werk, Kostenstelle etc.) beschränkt werden soll.
  • In Eigenentwicklungen (Z-Programme/Klassen), um sicherzustellen, dass Benutzer nur das tun dürfen, wofür sie berechtigt sind. Standardtransaktionen und BAPIs enthalten oft schon eingebaute Berechtigungsprüfungen (siehe SU24 zur Verknüpfung von T-Codes und Objekten).

Beispiele

1. Berechtigung für eine Transaktion prüfen

AUTHORITY-CHECK OBJECT 'S_TCODE'
ID 'TCD' FIELD 'VA01'. " Darf der User VA01 starten?
IF sy-subrc <> 0.
MESSAGE 'Du hast keine Berechtigung für Transaktion VA01.' TYPE 'E'.
LEAVE PROGRAM.
ENDIF.

2. Berechtigung zum Anzeigen von Finanzdaten für einen Buchungskreis

DATA lv_company_code TYPE bukrs.
lv_company_code = '1000'. " Buchungskreis, für den geprüft wird
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' " Objekt für Buchhaltungsbeleg/Buchungskreis
ID 'BUKRS' FIELD lv_company_code " Prüfe auf diesen Buchungskreis
ID 'ACTVT' FIELD '03'. " Prüfe auf Aktivität 'Anzeigen'
IF sy-subrc <> 0.
MESSAGE |Keine Anzeigeberechtigung für Buchungskreis { lv_company_code } vorhanden.| TYPE 'W'.
RETURN. " Methode/Form verlassen
ENDIF.
" ... Code zum Anzeigen der Daten für lv_company_code ...

3. Prüfung mit DUMMY (ob Objekt generell vorhanden ist)

" Prüfen, ob der Benutzer überhaupt irgendeine Berechtigung für Materialstämme hat
AUTHORITY-CHECK OBJECT 'M_MATE_STA'
ID 'ACTVT' DUMMY
ID 'STATM' DUMMY.
IF sy-subrc = 12. " sy-subrc 12 = Kein Profil für das Objekt gefunden
WRITE: / 'Benutzer hat generell keine Materialstamm-Berechtigung.'.
ENDIF.

Wichtige Hinweise / Best Practice

  • Werte sy-subrc immer direkt nach AUTHORITY-CHECK aus.
  • Implementiere eine klare Fehlerbehandlung, wenn sy-subrc <> 0 ist (z. B. Fehlermeldung ausgeben, Verarbeitung abbrechen).
  • Verwende Konstanten (z. B. über CONSTANTS) für die Namen der Berechtigungsobjekte und -felder, um Tippfehler zu vermeiden und die Wartbarkeit zu erhöhen.
  • Sprich Dich mit dem Berechtigungsmanagement Deines Unternehmens ab, welche Berechtigungsobjekte und Feldwerte für Deine Anwendung relevant sind und geprüft werden sollen.
  • Prüfe alle relevanten Felder eines Objekts, die für die Sicherheit der Aktion notwendig sind (oft gehört ACTVT dazu).