Les Business Catalogs sont l’élément central de la gestion des autorisations dans ABAP Cloud. Ils regroupent des applications et des services en unités logiques qui peuvent ensuite être assignées à des rôles. Cet article montre comment créer vos propres Business Catalogs pour vos applications.
Le concept IAM dans ABAP Cloud
Dans ABAP Cloud, la gestion des autorisations repose sur Identity and Access Management (IAM). Il diffère fondamentalement du concept d’autorisation ABAP classique :
┌──────────────────────────────────────────────────────────────────────────┐│ 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) │ ││ └─────────────────────────┘ ││ │└──────────────────────────────────────────────────────────────────────────┘Composants en aperçu
| Composant | Créé par | Description |
|---|---|---|
| IAM App | Développeur | Représentation technique d’une application |
| IAM Business Catalog | Développeur | Regroupement logique d’applications et de services |
| Business Role Template | Administrateur | Modèle pour les rôles basés sur les Catalogs |
| Business Role | Administrateur | Rôle concret avec des valeurs (par ex. code société) |
| Business User | RH/Admin | Utilisateur final auquel des rôles sont assignés |
Différence avec ABAP classique
| Aspect | ABAP classique | ABAP Cloud |
|---|---|---|
| Objets d’autorisation | SU21 | ADT Authorization Objects |
| Gestion des rôles | PFCG | IAM Business Role App |
| Gestion des utilisateurs | SU01 | Maintain Business Users App |
| Catalogues | PFCG-Menü | IAM Business Catalogs |
| Transport | CTS | Basé Git avec Software Components |
Créer une IAM App
L’IAM App est la base technique. Elle est générée automatiquement lors de la création d’un Service Binding, ou peut être créée manuellement.
Génération automatique
Lors de la création d’un Service Binding, une IAM App est automatiquement générée :
Service Binding: ZUI_TRAVEL_O4 └── IAM App: ZUI_TRAVEL_O4_ODATA_V4 (automatisch generiert)Création manuelle dans ADT
- New → Other ABAP Repository Object
- Cloud Identity and Access Management → IAM App
- Attribuer un ID et une description
<!-- 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 pour plusieurs services
Une IAM App peut regrouper plusieurs services :
<?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>Créer un IAM Business Catalog
Le Business Catalog regroupe les IAM Apps en une unité logique qui peut ensuite être assignée à des rôles.
Étape 1 : Créer un Business Catalog
- Dans ADT : New → Other ABAP Repository Object
- Cloud Identity and Access Management → IAM Business Catalog
- Attribuer un ID et une description
Étape 2 : Définition du Catalog
<?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>Étape 3 : Structure de Catalog pour grandes applications
Pour les applications plus importantes, une structure hiérarchique est recommandée :
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)Exemple : Plusieurs 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 et Fields
Les Restriction Types permettent de restreindre les autorisations à certaines valeurs organisationnelles (par ex. code société, organisation commerciale).
Définir un Restriction Type
<?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>Lier Restriction Type avec 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> </catalogApps>
<!-- Restriction Type Zuordnung --> <restrictionTypes> <restrictionType>ZTRAVEL_RT</restrictionType> </restrictionTypes>
</iam:catalog>Vérifier les Restriction Fields dans l’application
Dans votre application RAP, vous devez prendre en compte les Restriction Fields dans l’implémentation d’Authorization :
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.Activités standard (ACTVT)
| Valeur | Activité |
|---|---|
| 01 | Créer |
| 02 | Modifier |
| 03 | Afficher |
| 06 | Supprimer |
| 16 | Exécuter |
Intégration avec Fiori Launchpad
Tuile Launchpad avec IAM App
L’IAM App contrôle quelles tuiles sont affichées dans le Fiori Launchpad :
┌──────────────────────────────────────────────────────────────────────────┐│ 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 dans le Launchpad Designer
Après le transport du Business Catalog, l’administrateur peut l’assigner dans le Launchpad Designer :
- Fiori Launchpad Designer ouvrir
- Catalog sélectionner
- Target Mappings configurer
- Tiles définir
Lier l’App Descriptor (manifest.json)
Dans l’application UI5, l’action d’objet sémantique doit être définie :
{ "sap.app": { "id": "ztravel.manage", "title": "{{appTitle}}", "crossNavigation": { "inbounds": { "manage-travel": { "semanticObject": "Travel", "action": "manage", "signature": { "parameters": {}, "additionalParameters": "allowed" } } } } }}Créer un Business Role Template
L’administrateur utilise le Business Catalog pour créer des Business Role Templates.
Fiori App : Maintain Business Roles
- App Maintain Business Roles ouvrir
- Create from Template ou Create from Business Catalogs
- Sélectionner Business Catalog (par ex. ZTRAVEL_BC_MANAGER)
- Gérer Restriction Values
Définir Restriction Values
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, user3Plusieurs rôles pour différentes régions
ZTRAVEL_MANAGER_EU → Region EU, Agenturen 1000-1002ZTRAVEL_MANAGER_US → Region US, Agenturen 2000-2002ZTRAVEL_MANAGER_APAC → Region APAC, Agenturen 3000-3002Débogage et dépannage
Problème : App non visible dans le Launchpad
-
Business Catalog activé ?
- Vérifier si le Catalog a été transporté et est actif
-
Business Role assigné ?
- App “Display Business Users” → vérifier utilisateur
- Le rôle doit contenir le Catalog
-
Target Mapping configuré ?
- Vérifier Launchpad Designer
- Semantic Object et Action doivent correspondre
Problème : Authorization Check échoue
-
Restriction Values gérés ?
- Vérifier les Restriction Values dans Business Role
- Saisir toutes les valeurs organisationnelles pertinentes
-
AUTHORITY-CHECK correct ?
" 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. -
Objet d’autorisation présent ?
- Vérifier dans ADT si Authorization Object existe
- Les Fields doivent correspondre avec Restriction Type
Activer Authorization Trace
Pour une analyse détaillée :
" 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.Bonnes pratiques
1. Catalogs granulaires
Créer des Catalogs séparés pour différents groupes d’utilisateurs :
ZPROJECT_BC_VIEWER → Nur AnzeigeZPROJECT_BC_EDITOR → Anzeige + BearbeitungZPROJECT_BC_ADMIN → Vollzugriff + Konfiguration2. Convention de nommage cohérente
{PREFIX}_{BEREICH}_BC_{FUNKTION}
Exemples :ZTRAVEL_BC_MANAGER → Travel Management für ManagerZMM_BC_PURCHASER → Materials Management für EinkäuferZSD_BC_SALES_REP → Sales für Vertriebsmitarbeiter3. Réutiliser les Restriction Types
Définir des Restriction Types réutilisables pour les niveaux organisationnels :
<!-- 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
Documenter les Business Catalogs pour les administrateurs :
| Catalog ID | Description | Restrictions nécessaires | Groupe cible |
|---|---|---|---|
| ZTRAVEL_BC_MANAGER | Reisemanagement | ZAGENCY, ZREGION | Manager |
| ZTRAVEL_BC_EMPLOYEE | Reiseantrag | keine | Alle Mitarbeiter |
5. Test avec différents utilisateurs
" 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.Résumé
Le concept IAM dans ABAP Cloud offre une gestion des autorisations moderne et flexible :
| Composant | Responsabilité | Création |
|---|---|---|
| IAM App | Association de services | ADT (Développeur) |
| Business Catalog | Regroupement d’Apps | ADT (Développeur) |
| Restriction Type | Restrictions organisationnelles | ADT (Développeur) |
| Business Role | Attribution de valeurs | Fiori App (Admin) |
| User Assignment | Attribution de rôles | Fiori App (Admin) |
La séparation claire entre développement (qu’est-ce qui est possible ?) et administration (qui peut faire quoi ?) permet une gestion des autorisations sécurisée et maintenable.
Thèmes connexes
- RAP Authorization - Implémenter les vérifications d’autorisation dans RAP
- Authorization Checks - Instruction AUTHORITY-CHECK en détail
- Communication Scenarios Guide - Autorisations d’interfaces