SharePoint Online – Upravljanje pravic s Power Automate

30.05.2024

Če se vam je pri delu z elementi ali dokumenti v SharePoint Online pojavila potreba po samodejnem upravljanju s pravicami, je lahko Power Automate prava rešitev.

Če se vam je pri delu z elementi ali dokumenti v SharePoint Online pojavila potreba po samodejnem upravljanju s pravicami, je lahko Power Automate prava rešitev.

V našem primeru želimo ob ustvarjanju novega elementa na seznamu sprožiti tok, ki bo preveril, ali ima novi element stolpec Zaupno tipa Yes/No nastavljen na Yes, in v tem primeru na elementu počistil podedovane pravice, nastavil Contribute nivo pravic skupini SP_Zaupno ter custom nivo pravico Contribute wo Delete avtorju elementa.

Najprej bo treba v Power Automate ustvariti nov tok tipa Automated cloud flow, ki bo imel za sprožilec When an item is created. Toku v tem koraku dodelimo tudi ime.


Osebno me novi uporabniški vmesnik v Power Automate še vedno ni prepričal, tako da zaenkrat v vseh novih tokih le tega izklapljam in uporabljam starega. Če boste sledili primeru bodite na slikah pozorni na poimenovanja Send an HTTP request to SharePoint akcij, saj so imena teh akcij relevantna za pisanje funkcij.

V našem primeru smo želeli preverjati, ali ima element Zaupno nastavljeno kot Yes, zato za sprožilec dodamo Condition akcijo iz skupine Control. Kot pogoj iz dinamične vsebine nastavimo, da želimo preverjati vsebino stolpca Zaupno, operator je is equal to, kriterij pa true. V stolpcih tipa Da/Ne Da pomeni true, Ne pomeni false.

V If yes vejo tega toka nato dodamo Send an HTTP request to SharePoint akcijo tipa POST s sledečo vsebino, kjer v našem primeru v items() vnesemo dinamično vsebino – ID sprožilca. ID bi lahko zapisali tudi statično, a v tem primeru bi pravice vedno spreminjali na istem elementu.

_api/web/lists/getByTitle('[Sem vnesemo ime našega seznama]')/items([Sem vstavimo dinamično ali statično vsebino])/breakroleinheritance(copyRoleAssignments=false, clearSubscopes=true).

Da bomo lahko v nadaljevanju osebam in/ali skupinam dodeljevali pravice, moramo dobiti njihove ID-je. To naredimo z dodatnimi Send an HTTP request to SharePoint akcijami tipa GET. Za pridobiti ID osebe, uporabimo:

_api/web/SiteUsers/getByEmail('[Sem vstavimo dinamično ali statično vsebino]')

Kjer za naš primer v getByEmail('') vnesemo dinamično vsebino Created By Email. Lahko pa bi vnesli tudi statičen email, če bi pravice vedno želeli dodeljevati isti osebi. Ne spreglejte enojnih narekovajev!

Za pridobivanje ID-ja skupine pa lahko uporabimo:

_api/web/SiteGroups/getByName('[Sem vnesemo dinamično ali statično vsebino]')

V našem primeru bi torej izgledalo tako:

_api/web/SiteGroups/getByName('SP_Zaupno')

Nato nas čakata še 2 Send and HTTP request to SharePoint akciji tipa POST, ena za dodeljevanje pravic uporabniku:

_api/web/lists/getByTitle('Pravice')/items([Sem vnesemo dinamično ali statično vsebino])/roleassignments/addroleassignment(principalid=[Sem vnesemo rezultate HTTP akcije za pridobitev ID-ja uporabnika],roleDefId=1073741930)

Tu nam manjka še ID v items(), v našem primeru bi se zopet odločili za dinamično vsebino – ID sprožilca, ter principal ID, ki pa bi ga pridobili s pomočjo funkcije iz rezultata prejšnje akcije, kjer smo pridobivali ID uporabnika.


body('Send_an_HTTP_request_to_SharePoint_-_Get_Created_By')?['d']?['id']


roleDefId parameter določa, kakšen nivo pravic naj dobi uporabnik/skupina. Tu smo želeli dodeliti custom nivo pravic Contribute wo Delete. Žal pravic ne moremo dodeljevati na podlagi imena nivoja pravic, pač pa le na podlagi ID-ja nivoja pravic. Tega lahko poiščemo na naslovu https://[Ime tenanta].sharepoint.com/sites/[Ime zbirke mest]/_api/web/roledefinitions. XML s tega naslova si skopiramo v kakšno spletno orodje za formatiranje XML-a v JSON, da dobimo lep zapis in na podlagi imena nivoja pravic poiščemo njegov ID.

 Druga HTTP GET akcija pa bi bila za skupino:

_api/web/lists/getByTitle('Pravice')/items([Sem vnesemo dinamično ali statično vsebino])/roleassignments/addroleassignment(principalid==[Sem vnesemo rezultate HTTP akcije za pridobitev ID-ja skupine],roleDefId=1073741827)

V našem primeru sem za pridobitev ID-ja skupine iz rezultata ene od prejšnjih HTTP akcij potreboval takšno funkcijo.

body('Send_an_HTTP_request_to_SharePoint_-_Get_SP_Zaupno')?['d']?['id']

Za roleDefId smo v tej akciji uporabili šifro 1073741827, kar je šifra za SharePointov vgrajeni nivo pravic Contribute.


Če je šlo vse po sreči, bi morale biti po testiranju na elementih ustrezno nastavljene pravice. V mojem primeru sem z Uporabnikom 6 naredil nov element tipa zaupno. Pravice so za posamezne userje nastavljene tako (Klemen Vončina je Site Collection Admin in ima pravice do vsega):


Za skupine pa tako:

 

 
Klemen Vončina
Microsoft Office Specialist Master
predavatelj, MCT
klemen.voncina@kompas-xnet.si

Do you have any additional questions?

For more information, we are always happy to assist you. Feel free to contact us at info@kompas-xnet.si or call us at 01 5136 990.

Contact us

Novice

Naročite se na Xnet novice in ostanite na tekočem glede novih tečajev, seminarjev, možnosti pridobitve novih certificiranj in akcijskih cen.

Not yet subscribed to our newsletter?

Subscribe to Xnet news and stay up to date on new courses, seminars, opportunities to obtain new certifications and special prices.

Need assistance? bot icon
Need assistance?