Quantcast
Viewing all articles
Browse latest Browse all 79

A faster way to get effective permissions with PnP Core

PnP Core SDK has built in functionality to get effective permissions for a user on a list item in SharePoint:

IList list = await context.Web.Lists.GetByTitleAsync(listName);
IListItem item = await list.Items.GetByIdAsync(itemId);
IBasePermissions permissions = await item.GetUserEffectivePermissionsAsync(upn);

This is pretty slow; typically ~1000ms. So I tried calling the REST API directly instead:

var apiRequest = new ApiRequest(ApiRequestType.SPORest, "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/getusereffectivepermissions(@u)?@u='" + Uri.EscapeDataString("i:0#.f|membership|" + upn) + "'");
var response = await context.Web.ExecuteRequestAsync(apiRequest);
JsonNode json = JsonNode.Parse(response.Response)!;
IBasePermissions permissions = context.Web.EffectiveBasePermissions;
permissions.High = Convert.ToInt64(json["d"]!["GetUserEffectivePermissions"]!["High"]!.GetValue<string>());
permissions.Low = Convert.ToInt64(json["d"]!["GetUserEffectivePermissions"]!["Low"]!.GetValue<string>());

Turns out this is almost twice as fast, ~600ms!


Viewing all articles
Browse latest Browse all 79

Trending Articles