Core Data Services (CDS) ABAP

CDS Berechtigungsprüfung

(C) Brandeis Consulting

Begriffe für Berechtigungsprüfung

CDS Rolle

Die Rolle enthält die Berechtigungen. Eine Rolle wird aktuell noch jedem ABAP Benutzer zugewiesen. Siehe SAP Dokumentation

Zugriffsregeln

Zugriffsregeln definieren (WHERE) Bedingungen. Sie können auch von anderen CDS Objekten bzw. deren Zugriffsregeln erben.

Zugriffsbedingungen

Zugriffsbedingungen können formuliert werden mit

  • Konstanten Werten
  • dem aktuellen Benutzername
  • Werten aus Berechtigungsobjekten (Transaktion SU21)
  • Vererbung aus anderen Views bzw. Rollen
(C) Brandeis Consulting

Konzept

Da alle Benutzer alle Rollen haben, ist der Begriff mehr als verwirrend.

  • Es werden stets die Berechtigungen geprüft, die für den verwendeten View definiert sind. D.h. die von diesem aufgerufenen Views prüfen ihre Berechtigungen nicht.

ausser bei CDS Queries

  • Es werden die Rollen der primären Quelle der Query geprüft, nicht die Rollen der Query. Also eines Cube- oder Dimension-Views.
  • Falls Dimension-Views zu einem Cube-View assoziiert wurden, werden deren Rollen beim Zugriff auf den Cube nicht geprüft. Es wird nur die primäre Quelle geprüft.
(C) Brandeis Consulting

Beispiel-Szenario

Wir haben einen View, der den Object-Catalog (aka. TADIR) anzeigt:

define view entity ZI_ObjectCatalog as select from tadir
{
    key pgmid as Pgmid,
    key object as Object,
    key obj_name as ObjName,
    srcsystem as Srcsystem,
    author as Author,
    devclass as Devclass,
    genflag as Genflag,
    check_date
}
(C) Brandeis Consulting

Beispiel: Berechtigungsrollen für den Objektkatalog

Objekte anzeigen, die der User selber angelegt hat

@EndUserText.label: 'Own objects'
@MappingRole: true
define role ZI_OBJECTCATALOG_AUTH {
    grant select on
                ZI_OBJECTCATALOG
          where Author = aspect user;
                        
}

Objekte anzeigen, die er laut S_DEVELOP- Berechtigungsobjekt anzeigen darf

@EndUserText.label: 'Authorized Objects'
@MappingRole: true
define role ZI_OBJECTCATALOG_AUTH2 {
    grant select on
                ZI_OBJECTCATALOG
     where (Devclass, Object) = aspect pfcg_auth( S_DEVELOP, 
                                                  objname, 
                                                  devclass, 
                                                  actvt = '03'     );                        
}
(C) Brandeis Consulting

Annotation @AccessControl.authorizationCheck

Die View Annotation @AccessControl.authorizationCheck steuert, ob eine Rolle existieren muss, die diesen CDS-View betrifft. Mögliche Ausprägungen sind:

  • #CHECK - Die Syntaxprüfung des CDS-Views bzw. der SELECT-Abfrage darauf liefert eine Warnung, falls keine Rolle definiert wurde. Das ist der Standardwert!
  • #NOT_ALLOWED - Syntaxfehler falls eine Rolle existiert.
  • #NOT_REQUIRED - Rollen sind möglich, aber keine Pflicht.
  • #PRIVILEGED_ONLY - Direkter Zugriff nur im ABAP SQL mit dem Zusatz WITH PRIVIVLEGED ACCESS möglich. Ein solcher View kann zur Nutzung alternativ mit einem Wrapper versehen werden oder als Assoziations-Partner verwendet werden.
(C) Brandeis Consulting

Berechtigungsprüfung aus ABAP Sicht

Im SELECT im ABAP wird die Berechtigung normalerweise geprüft.

Mit dem Zusatz WITH PRIVIVLEGED ACCESS in SELECT Anweisungen kann die Berechtigungsprüfung umgangen werden.

SELECT 
  FROM zjb_as_tasks WITH PRIVILEGED ACCESS
  FIELDS
    ...
    
(C) Brandeis Consulting