In Microsoft Dataverse Benutzern automatisiert Zugriff auf nur bestimmte Datensätze geben

Wie man mit Microsoft Power Automate bestimmten Benutzern automatisiert Zugriffsberechtigung auf Datensätze in Microsoft Dataverse (Rowlevel Security) gibt und auch wieder nimmt.

Berechtigungen von Datensätzen per Microsoft Flow

Microsoft Power Automate & Berechtigungen pro Datensatz einer App-Entität

Modeldriven Power-Apps-Umgebungen bringen bereits ein sehr gutes und Intuitives Rollenbasiertes Berechtigungskonzept mit. So ist es beispielsweise sehr einfach Zugriffsmöglichkeiten (Acess-Level: wie darf der Benutzer zugreifen) auf Datensätze von Microsoft Dataverse Tabellen über Rollen festzulegen bzw. einzuschränken. Da das Access-Level keine Ja/Nein-Information ist, sondern ein Schlüssel - eine etwas unglückliche Bezeichnung, wie ich finde - über den man festlegen kann, auf welche Datensätze der Tabelle der Benutzer den entsprechenden Zugriff hat, kann man automatisch den Zugriff auf Rowlevel-Ebene einschränken. 

 

Diese Einstellungsmöglichkeit findet man unter: Erweiterte Einstellungen > Einstellungen > System > Sicherheit > Sicherheitsrollen > [entsprechende Rolle] > [entsprechende Tabelle].

 

Über die Matrix kann man für jede Tabelle festlegen, wie (= Access-Level) Mitglieder der Rolle auf diese Datensätze zugreifen dürfen. Folgende Access-Level stehen zur Verfügung: Erstellen, Lesen, Schreiben, Löschen, Anfügen, Anfügen an, Zuweisen, Freigeben.

Für jedes dieser Access-Level kann über den Schlüssel bestimmt werden, auf welche Datensätze sich der Zugriff bezieht. Diese können sein: Datensätze des jeweiligen Benutzers, Datensätze aller Benutzer einer Unternehmenseinheit, Datensätze aller Benutzer einer übergeordneten Organisation, Datensätze aller Benutzer der gesamte Organisation.

Berechtigung Schlüssel

Was aber, wenn die Einteilung auf Benutzer- Unternehmens- oder Organisationslevel nicht für meinen Praxisfall passt? Wenn beispielsweise alle Benutzer eines Teams Zugriff auf bestimmte Datensätze haben sollen. Ist das möglich?

 

Ja: ist es!

 

Hierfür ist es wichtig zu wissen, dass der Schlüssel „Benutzer“ den Zugriff auf Datensätze, die von dem jeweiligen Benutzer erstellt wurden oder mit dem Benutzer geteilt wurden, gewährt. Das Teilen von Datensätzen wird über den Ribbon-Button "Freigeben" und das nachfolgende Angeben von Benutzern oder Teams erreicht. Technisch werden dazu Einträge in der Tabelle PrincipalObjectAccess (POA) erstellt.

 

Im Folgenden soll es nun darum gehen, diese Freigabe über Power Automate zu automatisieren. 

 

Um eine Datensatz-Freigabe über Power Automate zu erstellen bzw. zu entfernen, bedient man sich einer Unbound Action. Mit "GrantAccess" wird eine Freigabe für einen einzelnen Benutzer oder ein Team erstellt.

GrantAccess

Welche Parameter werden bei "GrantAccess" übergeben?

 

Unter "Target" wird angegeben um welche Tabelle es sich handelt und in Klammern die GUID des entsprechenden Datensatzes für den die Freigabe erfolgen soll. In meinem Fall wird ein Datensatz der Tabelle "m8_modul" freigegeben.

Bsp. m8_moduls(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx)

 

Unter "PrincipalAccess" wird angegeben wem Zugriff gegeben wird, einem einzelnen Benutzer oder einer Gruppe und den entsprechenden Datentyp (Microsoft.Dynamics.CRM.systemuser oder Microsoft.Dynamics.CRM.teams) .

Will man einem einzelnen Nutzer Zugriff gewähren, wird es wie im Bild gemacht. Die "systemuserid" ist hierbei die GUID des entsprechenden Benutzers für den man den Datensatz freigeben möchte.

 

Achtung: Falls ein Formatfehler auftritt muss "@@odata.type" geschrieben werden (@@ doppelt).

 

Eine Freigabe für ein Team sieht wie folgt aus:

Blogeintrag

"AccessMask" regelt die Freigabestufe, welche für den entsprechenden Datensatz erteilt wird.

 

Folgende AccessMask‘s können gesetzt werden:

 

None = Keinen Zugriff

ReadAccess = Leserechte auf den Datensatz

WriteAccess = Lese- und Schreibrechte auf den Datensatz

AppendAccess = Anfügen eines weiteren Datensatzes an den Datensatz

AppendToAccess = Dem Datensatz einen bestimmten Datensatz anfügen (AppenAccess und AppendToAccess funktionieren in Kombination)

CreateAccess = Datensatz erstellen

DeleteAccess = Datensatz löschen

ShareAccess = Datensatz freigeben für einen Systemuser/Team

AsignAccess = Besiter des Datensatzes ändern

Mittels „RevokeAccess“ kann die Freigabe wieder entfernt werden.

RevokeAccess

"PrincipalId" ist die GUID des Systemuser dem der Zugriff auf einen bestimmten Datensatz (ObjectId = GUID des Datensatzes) der Tabelle "m8_modul" entzogen werden soll.