PnP Core SDK has built in functionality to get effective permissions for a user on a list item in SharePoint:
1 2 3 |
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:
1 2 3 4 5 6 |
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!