Business Catalogs sind das zentrale Element der Berechtigungsverwaltung in ABAP Cloud. Sie bündeln Apps und Dienste zu logischen Einheiten, die dann Rollen zugewiesen werden können. Dieser Artikel zeigt, wie du eigene Business Catalogs für deine Anwendungen erstellst.
Das IAM-Konzept in ABAP Cloud
In ABAP Cloud basiert die Berechtigungsverwaltung auf dem Identity and Access Management (IAM). Es unterscheidet sich grundlegend vom klassischen ABAP-Berechtigungskonzept:
┌──────────────────────────────────────────────────────────────────────────┐│ IAM-Konzept in ABAP Cloud │├──────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────────────────────┐ ││ │ IAM App │ ◄── Entwickler erstellt ││ │ (Technische App-ID) │ ││ └────────────┬────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────┐ ││ │ IAM Business Catalog │ ◄── Entwickler erstellt ││ │ (Bündelt Apps/Services)│ ││ └────────────┬────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────┐ ││ │ IAM Business Role │ ◄── Administrator erstellt ││ │ Template │ ││ └────────────┬────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────┐ ││ │ Business User │ ◄── Administrator weist zu ││ │ (Endanwender) │ ││ └─────────────────────────┘ ││ │└──────────────────────────────────────────────────────────────────────────┘Komponenten im Überblick
| Komponente | Erstellt von | Beschreibung |
|---|---|---|
| IAM App | Entwickler | Technische Repräsentation einer Anwendung |
| IAM Business Catalog | Entwickler | Logische Bündelung von Apps und Services |
| Business Role Template | Administrator | Vorlage für Rollen basierend auf Catalogs |
| Business Role | Administrator | Konkrete Rolle mit Werten (z.B. Buchungskreis) |
| Business User | HR/Admin | Endanwender, dem Rollen zugewiesen werden |
Unterschied zu klassischem ABAP
| Aspekt | Klassisches ABAP | ABAP Cloud |
|---|---|---|
| Berechtigungsobjekte | SU21 | ADT Authorization Objects |
| Rollenpflege | PFCG | IAM Business Role App |
| Benutzerpflege | SU01 | Maintain Business Users App |
| Kataloge | PFCG-Menü | IAM Business Catalogs |
| Transport | CTS | Git-basiert mit Software Components |
IAM App erstellen
Die IAM App ist die technische Grundlage. Sie wird automatisch generiert, wenn du einen Service Binding erstellst, oder kann manuell angelegt werden.
Automatische Generierung
Bei der Erstellung eines Service Bindings wird automatisch eine IAM App generiert:
Service Binding: ZUI_TRAVEL_O4 └── IAM App: ZUI_TRAVEL_O4_ODATA_V4 (automatisch generiert)Manuelle Erstellung in ADT
- New → Other ABAP Repository Object
- Cloud Identity and Access Management → IAM App
- ID und Beschreibung vergeben
<!-- IAM App Definition --><?xml version="1.0" encoding="utf-8"?><iam:iamApp xmlns:iam="http://www.sap.com/iam" iamAppId="ZTRAVEL_MANAGE">
<iamAppDescription>Travel Management Application</iamAppDescription>
<!-- Zugeordnete Service Bindings --> <serviceBinding>ZUI_TRAVEL_O4</serviceBinding>
<!-- Zugeordnete Business Services --> <businessService> <serviceId>ZUI_TRAVEL_O4</serviceId> <serviceVersion>0001</serviceVersion> </businessService>
</iam:iamApp>IAM App für mehrere Services
Eine IAM App kann mehrere Services bündeln:
<?xml version="1.0" encoding="utf-8"?><iam:iamApp xmlns:iam="http://www.sap.com/iam" iamAppId="ZTRAVEL_FULL">
<iamAppDescription>Complete Travel Management Suite</iamAppDescription>
<!-- Hauptanwendung --> <serviceBinding>ZUI_TRAVEL_O4</serviceBinding>
<!-- Value Help Service --> <serviceBinding>ZUI_TRAVEL_VH_O4</serviceBinding>
<!-- Report Service --> <serviceBinding>ZUI_TRAVEL_REPORT_O4</serviceBinding>
</iam:iamApp>IAM Business Catalog erstellen
Der Business Catalog bündelt IAM Apps zu einer logischen Einheit, die dann Rollen zugewiesen werden kann.
Schritt 1: Business Catalog anlegen
- In ADT: New → Other ABAP Repository Object
- Cloud Identity and Access Management → IAM Business Catalog
- ID und Beschreibung vergeben
Schritt 2: Catalog Definition
<?xml version="1.0" encoding="utf-8"?><iam:catalog xmlns:iam="http://www.sap.com/iam" catalogId="ZTRAVEL_BC">
<catalogDescription>Travel Management - Business Catalog</catalogDescription>
<!-- Enthaltene IAM Apps --> <catalogApps> <iamApp>ZTRAVEL_MANAGE</iamApp> <iamApp>ZTRAVEL_APPROVE</iamApp> </catalogApps>
</iam:catalog>Schritt 3: Catalog-Struktur für große Anwendungen
Für größere Anwendungen empfiehlt sich eine hierarchische Struktur:
Travel Management System├── ZTRAVEL_BC_MANAGER (Manager-Funktionen)│ ├── ZTRAVEL_MANAGE (Reisen verwalten)│ ├── ZTRAVEL_APPROVE (Genehmigen)│ └── ZTRAVEL_REPORT (Reports)│├── ZTRAVEL_BC_EMPLOYEE (Mitarbeiter-Funktionen)│ ├── ZTRAVEL_CREATE (Reise anlegen)│ └── ZTRAVEL_VIEW (Eigene Reisen anzeigen)│└── ZTRAVEL_BC_ADMIN (Admin-Funktionen) ├── ZTRAVEL_CONFIG (Konfiguration) └── ZTRAVEL_MASTER (Stammdaten)Beispiel: Mehrere Catalogs
<!-- Manager Catalog --><?xml version="1.0" encoding="utf-8"?><iam:catalog xmlns:iam="http://www.sap.com/iam" catalogId="ZTRAVEL_BC_MANAGER">
<catalogDescription>Travel Management - Manager Functions</catalogDescription>
<catalogApps> <iamApp>ZTRAVEL_MANAGE</iamApp> <iamApp>ZTRAVEL_APPROVE</iamApp> <iamApp>ZTRAVEL_REPORT</iamApp> </catalogApps>
</iam:catalog><!-- Employee Catalog --><?xml version="1.0" encoding="utf-8"?><iam:catalog xmlns:iam="http://www.sap.com/iam" catalogId="ZTRAVEL_BC_EMPLOYEE">
<catalogDescription>Travel Management - Employee Functions</catalogDescription>
<catalogApps> <iamApp>ZTRAVEL_CREATE</iamApp> <iamApp>ZTRAVEL_VIEW</iamApp> </catalogApps>
</iam:catalog>Restriction Types und Fields
Restriction Types ermöglichen die Einschränkung von Berechtigungen auf bestimmte Organisationswerte (z.B. Buchungskreis, Verkaufsorganisation).
Restriction Type definieren
<?xml version="1.0" encoding="utf-8"?><iam:restrictionType xmlns:iam="http://www.sap.com/iam" restrictionTypeId="ZTRAVEL_RT">
<restrictionTypeDescription>Travel Authorization Restrictions</restrictionTypeDescription>
<!-- Restriction Fields --> <restrictionField> <fieldName>ZAGENCY</fieldName> <fieldDescription>Travel Agency</fieldDescription> <dataElement>ZAGENCY_ID</dataElement> </restrictionField>
<restrictionField> <fieldName>ZREGION</fieldName> <fieldDescription>Region</fieldDescription> <dataElement>ZREGION_CODE</dataElement> </restrictionField>
<restrictionField> <fieldName>ACTVT</fieldName> <fieldDescription>Activity</fieldDescription> <dataElement>ACTIV_AUTH</dataElement> </restrictionField>
</iam:restrictionType>Restriction Type mit Catalog verknüpfen
<?xml version="1.0" encoding="utf-8"?><iam:catalog xmlns:iam="http://www.sap.com/iam" catalogId="ZTRAVEL_BC_MANAGER">
<catalogDescription>Travel Management - Manager Functions</catalogDescription>
<catalogApps> <iamApp>ZTRAVEL_MANAGE</iamApp> </catalogApps>
<!-- Restriction Type Zuordnung --> <restrictionTypes> <restrictionType>ZTRAVEL_RT</restrictionType> </restrictionTypes>
</iam:catalog>Restriction Fields in der Anwendung prüfen
In deiner RAP-Anwendung musst du die Restriction Fields in der Authorization-Implementierung berücksichtigen:
CLASS lhc_travel DEFINITION INHERITING FROM cl_abap_behavior_handler. PRIVATE SECTION. METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION IMPORTING keys REQUEST requested_authorizations FOR Travel RESULT result.ENDCLASS.
CLASS lhc_travel IMPLEMENTATION. METHOD get_instance_authorizations. " Instanzdaten lesen READ ENTITIES OF zi_travel IN LOCAL MODE ENTITY Travel FIELDS ( AgencyID Region ) WITH CORRESPONDING #( keys ) RESULT DATA(travels).
LOOP AT travels ASSIGNING FIELD-SYMBOL(<travel>). DATA(is_update_allowed) = abap_false. DATA(is_delete_allowed) = abap_false.
" Prüfung gegen Restriction Fields IF requested_authorizations-%update = if_abap_behv=>mk-on. AUTHORITY-CHECK OBJECT 'ZTRAVEL' ID 'ZAGENCY' FIELD <travel>-AgencyID ID 'ZREGION' FIELD <travel>-Region ID 'ACTVT' FIELD '02'. " Ändern
IF sy-subrc = 0. is_update_allowed = abap_true. ENDIF. ENDIF.
IF requested_authorizations-%delete = if_abap_behv=>mk-on. AUTHORITY-CHECK OBJECT 'ZTRAVEL' ID 'ZAGENCY' FIELD <travel>-AgencyID ID 'ZREGION' FIELD <travel>-Region ID 'ACTVT' FIELD '06'. " Löschen
IF sy-subrc = 0. is_delete_allowed = abap_true. ENDIF. ENDIF.
APPEND VALUE #( %tky = <travel>-%tky %update = COND #( WHEN is_update_allowed = abap_true THEN if_abap_behv=>auth-allowed ELSE if_abap_behv=>auth-unauthorized ) %delete = COND #( WHEN is_delete_allowed = abap_true THEN if_abap_behv=>auth-allowed ELSE if_abap_behv=>auth-unauthorized ) ) TO result. ENDLOOP. ENDMETHOD.ENDCLASS.Standard-Aktivitäten (ACTVT)
| Wert | Aktivität |
|---|---|
| 01 | Anlegen |
| 02 | Ändern |
| 03 | Anzeigen |
| 06 | Löschen |
| 16 | Ausführen |
Integration mit Fiori Launchpad
Launchpad Kachel mit IAM App
Die IAM App steuert, welche Kacheln im Fiori Launchpad angezeigt werden:
┌──────────────────────────────────────────────────────────────────────────┐│ Fiori Launchpad Integration │├──────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────────────────────┐ ││ │ IAM Business Catalog │ ││ │ ZTRAVEL_BC_MANAGER │ ││ └────────────┬────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────┐ ││ │ Business Role │ ││ │ ZTRAVEL_MANAGER_ROLE │ ││ └────────────┬────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────┐ ││ │ Fiori Launchpad │ ││ │ ┌─────┐ ┌─────┐ │ ││ │ │ App │ │ App │ │ ◄── Nur sichtbar, wenn ││ │ │ 1 │ │ 2 │ │ Rolle zugewiesen ││ │ └─────┘ └─────┘ │ ││ └─────────────────────────┘ ││ │└──────────────────────────────────────────────────────────────────────────┘Catalog im Launchpad Designer
Nach dem Transport des Business Catalogs kann der Administrator ihn im Launchpad Designer zuweisen:
- Fiori Launchpad Designer öffnen
- Catalog auswählen
- Target Mappings konfigurieren
- Tiles definieren
App Descriptor (manifest.json) verknüpfen
In der UI5-App muss die semantische Objekt-Action definiert werden:
{ "sap.app": { "id": "ztravel.manage", "title": "{{appTitle}}", "crossNavigation": { "inbounds": { "manage-travel": { "semanticObject": "Travel", "action": "manage", "signature": { "parameters": {}, "additionalParameters": "allowed" } } } } }}Business Role Template erstellen
Der Administrator nutzt den Business Catalog, um Business Role Templates zu erstellen.
Fiori App: Maintain Business Roles
- App Maintain Business Roles öffnen
- Create from Template oder Create from Business Catalogs
- Business Catalog auswählen (z.B. ZTRAVEL_BC_MANAGER)
- Restriction Values pflegen
Restriction Values definieren
Business Role: ZTRAVEL_MANAGER_EU├── Business Catalog: ZTRAVEL_BC_MANAGER│├── Restrictions:│ ├── ZAGENCY: 1000, 1001, 1002 (EU-Agenturen)│ ├── ZREGION: EU│ └── ACTVT: 01, 02, 03, 06 (Alle Aktivitäten)│└── Assigned Users: user1, user2, user3Mehrere Rollen für verschiedene Regionen
ZTRAVEL_MANAGER_EU → Region EU, Agenturen 1000-1002ZTRAVEL_MANAGER_US → Region US, Agenturen 2000-2002ZTRAVEL_MANAGER_APAC → Region APAC, Agenturen 3000-3002Debugging und Troubleshooting
Problem: App nicht im Launchpad sichtbar
-
Business Catalog aktiviert?
- Prüfe, ob der Catalog transportiert und aktiv ist
-
Business Role zugewiesen?
- App “Display Business Users” → User prüfen
- Rolle muss den Catalog enthalten
-
Target Mapping konfiguriert?
- Launchpad Designer prüfen
- Semantic Object und Action müssen übereinstimmen
Problem: Authorization Check schlägt fehl
-
Restriction Values gepflegt?
- In Business Role die Restriction Values prüfen
- Alle relevanten Organisationswerte eintragen
-
AUTHORITY-CHECK korrekt?
" Debug-AusgabeAUTHORITY-CHECK OBJECT 'ZTRAVEL'ID 'ZAGENCY' FIELD lv_agencyID 'ZREGION' FIELD lv_regionID 'ACTVT' FIELD '02'.IF sy-subrc <> 0." Log für DebuggingDATA(lv_msg) = |Auth failed: Agency={ lv_agency }, Region={ lv_region }|." Application Logging verwendenENDIF. -
Berechtigungsobjekt vorhanden?
- In ADT prüfen, ob Authorization Object existiert
- Fields müssen mit Restriction Type übereinstimmen
Authorization Trace aktivieren
Für detaillierte Analyse:
" In der Anwendung vor dem AUTHORITY-CHECKcl_abap_authority_check=>activate_auth_trace( ).
AUTHORITY-CHECK OBJECT 'ZTRAVEL' ID 'ZAGENCY' FIELD lv_agency ID 'ACTVT' FIELD '02'.
DATA(lt_trace) = cl_abap_authority_check=>get_auth_trace( ).
cl_abap_authority_check=>deactivate_auth_trace( ).
" Trace auswertenLOOP AT lt_trace INTO DATA(ls_trace). " ls_trace enthält Details zur PrüfungENDLOOP.Best Practices
1. Granulare Catalogs
Erstelle separate Catalogs für verschiedene Benutzergruppen:
ZPROJECT_BC_VIEWER → Nur AnzeigeZPROJECT_BC_EDITOR → Anzeige + BearbeitungZPROJECT_BC_ADMIN → Vollzugriff + Konfiguration2. Konsistente Namenskonvention
{PREFIX}_{BEREICH}_BC_{FUNKTION}
Beispiele:ZTRAVEL_BC_MANAGER → Travel Management für ManagerZMM_BC_PURCHASER → Materials Management für EinkäuferZSD_BC_SALES_REP → Sales für Vertriebsmitarbeiter3. Restriction Types wiederverwenden
Definiere wiederverwendbare Restriction Types für Organisationsebenen:
<!-- Allgemeiner Org-Restriction Type --><iam:restrictionType restrictionTypeId="ZORG_RT"> <restrictionField> <fieldName>BUKRS</fieldName> <fieldDescription>Company Code</fieldDescription> </restrictionField> <restrictionField> <fieldName>WERKS</fieldName> <fieldDescription>Plant</fieldDescription> </restrictionField> <restrictionField> <fieldName>VKORG</fieldName> <fieldDescription>Sales Organization</fieldDescription> </restrictionField></iam:restrictionType>4. Documentation
Dokumentiere Business Catalogs für Administratoren:
| Catalog ID | Beschreibung | Benötigte Restrictions | Zielgruppe |
|---|---|---|---|
| ZTRAVEL_BC_MANAGER | Reisemanagement | ZAGENCY, ZREGION | Manager |
| ZTRAVEL_BC_EMPLOYEE | Reiseantrag | keine | Alle Mitarbeiter |
5. Test mit verschiedenen Usern
" Unit Test für AuthorizationCLASS ltcl_authorization DEFINITION FOR TESTING RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS test_manager_auth FOR TESTING. METHODS test_employee_auth FOR TESTING.ENDCLASS.
CLASS ltcl_authorization IMPLEMENTATION. METHOD test_manager_auth. " Test mit Manager-Berechtigungen AUTHORITY-CHECK OBJECT 'ZTRAVEL' ID 'ZAGENCY' FIELD '1000' ID 'ACTVT' FIELD '02'.
cl_abap_unit_assert=>assert_equals( act = sy-subrc exp = 0 msg = 'Manager should have change authorization' ). ENDMETHOD.
METHOD test_employee_auth. " Test mit Employee-Berechtigungen (nur Anzeige) AUTHORITY-CHECK OBJECT 'ZTRAVEL' ID 'ZAGENCY' FIELD '1000' ID 'ACTVT' FIELD '02'.
" Dieser Test würde fehlschlagen, wenn als Employee ausgeführt ENDMETHOD.ENDCLASS.Zusammenfassung
Das IAM-Konzept in ABAP Cloud bietet eine moderne, flexible Berechtigungsverwaltung:
| Komponente | Verantwortung | Erstellung |
|---|---|---|
| IAM App | Service-Zuordnung | ADT (Entwickler) |
| Business Catalog | App-Bündelung | ADT (Entwickler) |
| Restriction Type | Org-Einschränkungen | ADT (Entwickler) |
| Business Role | Werte-Zuweisung | Fiori App (Admin) |
| User Assignment | Rollenzuweisung | Fiori App (Admin) |
Die klare Trennung zwischen Entwicklung (was ist möglich?) und Administration (wer darf was?) ermöglicht eine sichere und wartbare Berechtigungsverwaltung.
Weiterführende Themen
- RAP Authorization - Berechtigungsprüfung in RAP implementieren
- Authorization Checks - AUTHORITY-CHECK Statement im Detail
- Communication Scenarios Guide - Schnittstellen-Berechtigungen