Dataverse-Zugriffsrechte auslesen: Wer hat Zugriff auf welche Connection Reference?
- kim
- vor 5 Tagen
- 2 Min. Lesezeit
Wie Marie und Marvin beim Mofa-Schuppen herausfinden, wer auf eine Connection Reference Zugriff hat – und was genau erlaubt ist.
🧠 Ausgangssituation: Geteilt ist nicht gleich geteilt
Marie hat Marvin im letzten Blog Zugriff auf eine Connection Reference per Flow gegeben.
Jetzt fragt sich Marvin:
„Wie kann ich eigentlich prüfen, wer alles Zugriff auf diese Zeile hat – und ob ich wirklich die nötigen Rechte besitze?“
Und Marie möchte sicherstellen, dass niemand versehentlich mehr Rechte hat als nötig.
🧩 Die Lösung: principalobjectaccess + systemuser + Power Automate
Jeder explizit vergebene Zugriff auf eine Dataverse-Zeile wird in der Tabelle principalobjectaccessset gespeichert –auch bekannt als POA-Tabelle (Principal Object Access).
Diese POA-Einträge enthalten:
Feld | Bedeutung |
principalid | Wer hat Zugriff (User oder Team) |
objectid | Auf welchen Datensatz |
accessrightsmask | Welche Rechte (bitmaskiert) |
🔧 So sieht unser Flow aus – im Detail
Der Flow startet über Power Apps mit einer Dataverse-ID als Eingabe(z. B. eine Id aus der Connection Reference Tabelle).

Schritt 1: FetchXML mit Join auf Systemuser
Wir nutzen eine List rows-Aktion mit dieser FetchXML-Abfrage auf die Tabelle "principalobjectaccessset"
Hinweis: Diese Tabelle findet ihr i.d.R. nicht über die normale Sucheingabe, ihr müsst den Wert also manuell eingeben. Details dazu, siehe: https://www.itaintboring.com/dynamics-crm/how-to-verify-principle-object-access-directly-from-the-flow/

💡 Vorteil: Wir holen uns gleich den Klarnamen (fullname) des Users dazu.
Schritt 2: Select-Aktion – Wichtige Spalten selektieren & AccessMask übersetzen
Der Output der List rows wird per Parse JSON verarbeitet und dann in einer Select-Aktion übersetzt.

Dabei verwenden wir eine If/Else-Kette, um accessrightsmask in Klartext zu übersetzen:
if(equals(item()?['accessrightsmask'],0),'No access',
if(equals(item()?['accessrightsmask'],1),'Read only',
if(equals(item()?['accessrightsmask'],3),'Read and Write',
if(equals(item()?['accessrightsmask'],5),'Read and Append',
if(equals(item()?['accessrightsmask'],7),'Read, Write, Append',
if(equals(item()?['accessrightsmask'],23),'Read, Write, Append, AppendTo',
if(equals(item()?['accessrightsmask'],262145),'Read, Share',
if(equals(item()?['accessrightsmask'],262147),'Read, Write, Share',
if(equals(item()?['accessrightsmask'],262151),'Read, Write, Append, Share',
if(equals(item()?['accessrightsmask'],262167),'Read, Write, Append, AppendTo, Share',
if(equals(item()?['accessrightsmask'],65539),'Read, Write, Delete',
if(equals(item()?['accessrightsmask'],65559),'Read, Write, Delete, Append, AppendTo',
if(equals(item()?['accessrightsmask'],589847),'Read, Write, Delete, Append, Assign',
if(equals(item()?['accessrightsmask'],851991),'Read, Write, Delete, Append, Assign, Share','Other'))))))))))))))
Disclaimer:
Mit Sicherheit nicht perfekt und vollständig, hat uns aber an dieser Stelle gereicht, um die wichtigsten Access Rights abzufragen und menschenlesbar zu machen. Wir haben uns auf 14 häufige Kombinationen beschränkt – sonst lässt sich die Funktion nicht speichern.
🧪 Beispielausgabe (JSON)
[
{
"fullname": "Marvin Neumann",
"accessrightsmask": 65559,
"accessrightsmask_readable": "Read, Write, Delete, Append, AppendTo"
},
{
"fullname": "Marie Hoffmann",
"accessrightsmask": 1,
"accessrightsmask_readable": "Read only"
}
]
📱 Schritt 3: In Power Apps anzeigen
Der Flow gibt das JSON direkt an Power Apps zurück.
Dort kannst du es mit ParseJSON() und ClearCollect() in eine Collection laden:


Anzeige in Power Apps Oberfläche
Welcher User hat welche Zugriffsrechte auf welche Verbindungsreferenz?

Comments