IAM Business Catalogs erstellen - Berechtigungsverwaltung in ABAP Cloud

kategorie
Security
Veröffentlicht
autor
Johannes

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

KomponenteErstellt vonBeschreibung
IAM AppEntwicklerTechnische Repräsentation einer Anwendung
IAM Business CatalogEntwicklerLogische Bündelung von Apps und Services
Business Role TemplateAdministratorVorlage für Rollen basierend auf Catalogs
Business RoleAdministratorKonkrete Rolle mit Werten (z.B. Buchungskreis)
Business UserHR/AdminEndanwender, dem Rollen zugewiesen werden

Unterschied zu klassischem ABAP

AspektKlassisches ABAPABAP Cloud
BerechtigungsobjekteSU21ADT Authorization Objects
RollenpflegePFCGIAM Business Role App
BenutzerpflegeSU01Maintain Business Users App
KatalogePFCG-MenüIAM Business Catalogs
TransportCTSGit-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

  1. New → Other ABAP Repository Object
  2. Cloud Identity and Access Management → IAM App
  3. 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

  1. In ADT: New → Other ABAP Repository Object
  2. Cloud Identity and Access Management → IAM Business Catalog
  3. 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)

WertAktivität
01Anlegen
02Ändern
03Anzeigen
06Löschen
16Ausfü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:

  1. Fiori Launchpad Designer öffnen
  2. Catalog auswählen
  3. Target Mappings konfigurieren
  4. 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

  1. App Maintain Business Roles öffnen
  2. Create from Template oder Create from Business Catalogs
  3. Business Catalog auswählen (z.B. ZTRAVEL_BC_MANAGER)
  4. 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, user3

Mehrere Rollen für verschiedene Regionen

ZTRAVEL_MANAGER_EU → Region EU, Agenturen 1000-1002
ZTRAVEL_MANAGER_US → Region US, Agenturen 2000-2002
ZTRAVEL_MANAGER_APAC → Region APAC, Agenturen 3000-3002

Debugging und Troubleshooting

Problem: App nicht im Launchpad sichtbar

  1. Business Catalog aktiviert?

    • Prüfe, ob der Catalog transportiert und aktiv ist
  2. Business Role zugewiesen?

    • App “Display Business Users” → User prüfen
    • Rolle muss den Catalog enthalten
  3. Target Mapping konfiguriert?

    • Launchpad Designer prüfen
    • Semantic Object und Action müssen übereinstimmen

Problem: Authorization Check schlägt fehl

  1. Restriction Values gepflegt?

    • In Business Role die Restriction Values prüfen
    • Alle relevanten Organisationswerte eintragen
  2. AUTHORITY-CHECK korrekt?

    " Debug-Ausgabe
    AUTHORITY-CHECK OBJECT 'ZTRAVEL'
    ID 'ZAGENCY' FIELD lv_agency
    ID 'ZREGION' FIELD lv_region
    ID 'ACTVT' FIELD '02'.
    IF sy-subrc <> 0.
    " Log für Debugging
    DATA(lv_msg) = |Auth failed: Agency={ lv_agency }, Region={ lv_region }|.
    " Application Logging verwenden
    ENDIF.
  3. 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-CHECK
cl_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 auswerten
LOOP AT lt_trace INTO DATA(ls_trace).
" ls_trace enthält Details zur Prüfung
ENDLOOP.

Best Practices

1. Granulare Catalogs

Erstelle separate Catalogs für verschiedene Benutzergruppen:

ZPROJECT_BC_VIEWER → Nur Anzeige
ZPROJECT_BC_EDITOR → Anzeige + Bearbeitung
ZPROJECT_BC_ADMIN → Vollzugriff + Konfiguration

2. Konsistente Namenskonvention

{PREFIX}_{BEREICH}_BC_{FUNKTION}
Beispiele:
ZTRAVEL_BC_MANAGER → Travel Management für Manager
ZMM_BC_PURCHASER → Materials Management für Einkäufer
ZSD_BC_SALES_REP → Sales für Vertriebsmitarbeiter

3. 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 IDBeschreibungBenötigte RestrictionsZielgruppe
ZTRAVEL_BC_MANAGERReisemanagementZAGENCY, ZREGIONManager
ZTRAVEL_BC_EMPLOYEEReiseantragkeineAlle Mitarbeiter

5. Test mit verschiedenen Usern

" Unit Test für Authorization
CLASS 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:

KomponenteVerantwortungErstellung
IAM AppService-ZuordnungADT (Entwickler)
Business CatalogApp-BündelungADT (Entwickler)
Restriction TypeOrg-EinschränkungenADT (Entwickler)
Business RoleWerte-ZuweisungFiori App (Admin)
User AssignmentRollenzuweisungFiori 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