top of page

Dataverse-Zugriffsrechte auslesen: Wer hat Zugriff auf welche Connection Reference?

  • Autorenbild: kim
    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?


🔗 Nützliche Ressourcen

 
 
 

Comments


bottom of page