SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




JSLink ctx.CurrentItem.PermMask -> Check auf Berechtigung

Unbeantwortet Dieser Beitrag hat 2 Antworten

Ohne Rang
367 Beiträge
Christian Merkel erstellt 19 Okt. 2017 13:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

ich bin gerade dabei abhängig von den Rechten eines Nutzers auf ein Listen-Element diesen anders darzustellen.

Dabei gibt es die Eigenschaft "ctx.CurrentItem.PermMask". Diese liefert mir eine entsprechende Bit-Maske:

https://msdn.microsoft.com/en-us/library/cc704409.aspx

Über "SP.PermissionKind.editListItems" bekomm ich ja die Stufe für die Bearbeitung von Elementen.

Soweit so gut.

Wie kann ich jetzt aber sinnvoll prüfen, ob der Nutzer mindestens das Recht zum Editieren hat?

Es muss ja über eine Bit-Operation irgendwie möglich sein...

Mit meinem user habe ich die maske:

"0x7fffffffffffffff" --> Full Control

Ein Besucher hat die Maske:

"0xb008431061" --> Nur lesen

Jetzt will ich quasi per "ctx.CurrentItem.PermMask >= SP.PermissionKind.editListItems" sicherstellen, das er mindestens edit-Rechte hat... Aber so einfach ist das ja jetzt nicht ;)

Wer hat da schonmal etwas ähnliches gemacht? Gibt es irgend eine Funktion in der SP-Lib die das ggf. sogar schon bietet?

ich will nicht nochmal einen WebService-Request machen, da das für diese Liste sinnfrei wäre...

Danke euch!

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Okt. 2017 16:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich würde nicht mit der PermMask rummachen, das ist umständlich und schlecht lesbar.

Es gibt prinzipiell zwei andere Möglichkeiten:

var bp = new SP.BasePermissions();
bp.set(SP.PermissionKind.editListItems);
var hasPerms = ctx.CurrentItem.doesUserHavePermissions(bp);
ctx.executeQueryAsync(function() {
if (hasPerms.get_value()) {
// user has permissions
}
});

Oder über EffectiveBasePermissions (die müssen beim Laden des Items aber explizit angefordert werden):
if (ctx.CurrentItem.get_effectiveBasePermissions().has(SP.PermissionKind.editListItems)) {
// user has permissions
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
367 Beiträge
Christian Merkel Als Antwort am 19 Okt. 2017 16:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Leider steht mir zum zeitpunkt der Ausführung im JSLink ListView template der Namespace " SP.BasePermissions();" noch nicht zur Verfügung (warum auch immer...).

 

Ich hab jetzt folgenden Workaround gefunden der es mir zumindest erlaubt auf Edit-Permissions zu prüfen:

 

HasEditPermission(ctx.CurrentItem)

 

das reicht fürs erste. Den anderen Ansatz würde ich später mal verfolgen :)

danke dir!

SharePoint Enthusiast

Ich helfe gern, wenn es mein Zeit zu lässt :)
Gern auch per direkter Anfrage auf XING