CDS - Berechtigungsprüfung
Wie und wo werden die Berechtigungen für ein Core Data Service abgegrenzt? In diesem Artikel erfährst du die Einzelheiten dazu.
Inhaltsverzeichnis
Bisher hatten wir vor allem über die Beschaffung der Daten gesprochen und wie wir sie Anwendungen und Usern zur Verfügung stellen. Dabei haben wir uns über das eigentliche Sicherheitskonzept noch keine Gedanken gemacht und wie wir eigentlich verhindern, dass nicht jeder auf alles Zugriff hat. In diesem Artikel wollen wir dir einen ersten Einstieg in das Thema zur Verfügung stellen.
Allgemein
Die Prüfung der Berechtigungen für die Daten eines Core Data Service basieren zum Großteil aus den bewährten Konzepten des SAP Systems, aus den Berechtigungsobjekten. Für unsere Prüfungen definieren wir dazu ein eigenes Berechtigungsobjekt:
In diesem Fall basiert das Berechtigungsobjekt auf der Materialnummer und der Aktivität, um so Einschränkungen bei der Anzeige des Materials zu machen.
Zugriffskontrolle
Um nun eine Berechtigungsprüfung für ein Objekt zu definieren, legen wir ein Zugriffskontrolle an. Dies ist eine neue Art von Objekt die du direkt über das Kontextmenü des Core Data Service anlegen kannst:
Im Anschluss definieren wir den Inhalt der Prüfung. Wir erlauben Zugriff auf die Daten, wenn die nachfolgenden Bedingungen erlaubt sind. Da wir auf ein Berechtigungsobjekt verweisen, nutzen wir das den Aspekt "pcfg_auth", also die normale Userberechtigung:
@EndUserText.label: 'Authority check for material'
@MappingRole: true
define role ZBS_I_DmoMaterial {
grant
select
on
ZBS_I_DmoMaterial
where
( MaterialNumber ) = aspect pfcg_auth(ZBS_DMOMAT, MATNR, ACTVT = '03');
}
In der Where-Bedingung werden die Felder für den Vergleich selektiert (hier MaterialNumber) und im hinteren Teil die Felder geprüft. Die Anzahl der selektierten Felder, verteilt sich in der Reihenfolge auf die Platzhalter des Berechtigungsobjekts. In der Klammer folgt zuerst das Berechtigungsobjekt, dann die Platzhalter, die auch entsprechende Prüfwerte haben können. In diesem Fall wird MaterialNumber der MATNR zugewiesen und abgeglichen.
Folgende Prüfungen können in der Zugriffskontrolle gemacht werden:
- Abgleich einer Berechtigung (pfcg_auth)
- Direkte Einschränkung über die Where-Bedingung
Annotation
Im Quellview hatten wir bisher meist die Annotation "@AccessControl.authorizationCheck" auf "#NOT_REQUIRED" gesetzt, damit wird keine Berechtigungsprüfung erwartet und der Compiler weist nicht mehr auf das Fehlen der Zugriffskontrolle hin. Folgende Ausprägungen sind möglich:
- #CHECK - Verhält sich wie NOT_REQUIRED, aber der Compiler gibt dem Entwickler eine Warnmeldung aus, dass noch keine Prüfung implementiert wurde.
- #MANDATORY - Löst einen Dump aus, wenn auf den CDS View zugegriffen wird und keine Zugriffkontrolle definiert wurde.
- #NOT_ALLOWED - Gibt Warnmeldung aus, wenn eine Zugriffkontrolle angelegt wird.
- #NOT_REQUIRED - Wenn keine Zugriffkontrolle definiert ist und auch benötigt wird.
- #PRIVILEGED_ONLY - Der Zugriff per ABAP SQL funktioniert nur, wenn der Zusatz "with privileged rights" verwendet wird.
Fazit
Die Eingrenzung der Berechtigungen ist ebenso ein wichtiger Punkt wie der Aufbau des Datenmodells. Am Ende der Entwicklung solltest du dann auch für den Schutz deiner Daten sorgen. Grundsätzlich ist das Thema viel umfangreicher als von uns beschrieben, soll dir erst einmal einen leichten Einstieg gewähren.