Display the SharePoint list item permissions using REST API

Lets see how we can display the SharePoint list item permissions using REST API

I am going to use the SharePoint hosted app and SharePoint online. You could use an on premises installation as well.

Lets start by creating a SharePoint hosted app. Update the App.js as follows:

'use strict';

var hostweburl;
var appweburl;
var executor;

$(document).ready(function () {

// retrieve the hostweb url and appweb url from the query string
function getCustomPermission() {
  $(document).ready(function () {
    hostweburl =
    appweburl =

    var scriptbase = hostweburl + "/_layouts/15/";

    $.getScript(scriptbase + "SP.RequestExecutor.js", getRoleAssignments);

//make the rest call
function getRoleAssignments() {
  executor = new SP.RequestExecutor(appweburl);

            appweburl +
            "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Test')/items(1)?$expand=RoleAssignments/Member/Users&@target='" +
            hostweburl + "'",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: successHandler,
        error: errorHandler

//display results
function successHandler(data) {
  var jsonObject = JSON.parse(data.body);
  var roleAssignmentHTML = "";

  var results = jsonObject.d.RoleAssignments.results;
  for (var i = 0; i < results.length; i++) {

    roleAssignmentHTML = roleAssignmentHTML +
          "<p><b>" + results[i].Member.OwnerTitle +
    var users = results[i].Member.Users.results;
    if (users) {
      for (var u = 0; u < users.length; u++) {
        roleAssignmentHTML = roleAssignmentHTML + "<p>" + users[u].Title + "</p>";
  document.getElementById("message").innerHTML =

function errorHandler(data, errorCode, errorMessage) {
  document.getElementById("message").innerText =
      "Could not complete cross-domain call: " + errorMessage;

function getQueryStringParameter(paramToRetrieve) {
  var params =
  var strParams = "";
  for (var i = 0; i < params.length; i = i + 1) {
    var singleParam = params[i].split("=");
    if (singleParam[0] == paramToRetrieve)
      return singleParam[1];

Notice that we are using the $expand=RoleAssignments/Member/Users to get the user information present in each assignment.

App Permissions

In deploying to production you need to try out the different permission levels to ensure you are using the minimum required permissions.

This approach requires that we have a high enough permission level because we are listing the information of other users also.

When you build and execute the code, it should list the users and SharePoint groups which have the permission on the item.

Item Level Permissions Output

I have uploaded the code for this solution in github at ItemLevelPermissions

Customizing SharePoint Forms using JSLink

Lets explore customizing SharePoint Forms using JSLink.
Lets say we want to customize the New Form of a custom list.
Continue reading “Customizing SharePoint Forms using JSLink”

Creating a SharePoint SPA using AngularJS and Breeze

Today, we will look at creating a SharePoint SPA using AngularJS and Breeze in a SharePoint hosted app. Single Page Apps or SPA does not mean the application is limited to one page. The experience of navigating between pages is seamless for the user without the postback which happens when navigating to a page.
Continue reading “Creating a SharePoint SPA using AngularJS and Breeze”

Using eDiscovery in SharePoint Online

What is eDiscovery?

Auditors, Record managers and litigators can use eDiscovery to discover content in electronic format. It allows to collect content from multiple sources such as documents, files, emails etc. which could be used in a legal case.
Continue reading “Using eDiscovery in SharePoint Online”

PnP Provisioning Engine

Today, let’s explore the Microsoft patterns and practices or PnP Provisioning Engine solution to provision SharePoint artifacts. The way this works is the business users and designers make the required changes to the UI from the browser in one site. After that, we can import this entire configuration. Then, we can create new sites or artifacts using this configuration.

Continue reading “PnP Provisioning Engine”

Remote Event Receivers (RER) in SharePoint Online

Just like event receivers in the classic model, Remote Event Receivers (RER) in SharePoint Online also have before events and after events. Also called as synchronous and asynchronous events.

If you are not aware of this, what this essentially means is synchronous events are the -ing events. For example ItemAdding event where we can do a validation and cancel the event if the validation did not pass.
Continue reading “Remote Event Receivers (RER) in SharePoint Online”

Branding SharePoint Online

Even though the title for this post is Branding SharePoint Online, this is applicable to on-premises as well. Microsoft is suggesting that we should avoid creating custom master pages. Not that it should not be used, however we should consider other approaches such as themes and alternate css first.

Continue reading “Branding SharePoint Online”

Customize SharePoint UI using JavaScript

As a best practice, Microsoft recommends us to avoid customizing the SharePoint farm to achieve our business logic and functionality. Using the app model is a step towards this goal. The patterns and practices gives us guidance on how to achieve some of the functionality we used to do with farm solutions.

Today, lets see how to customize SharePoint UI using JavaScript

Continue reading “Customize SharePoint UI using JavaScript”

Access Office 365 using a Console Application

Create the Security Principal

Navigate to your Office 365 tenant. This will be of the format https://{your-domain}.sharepoint.com by default.

Open the application page https://{your-domain}.sharepoint.com/_layouts/15/appregnew.aspx
Continue reading “Access Office 365 using a Console Application”

Office 365 Authentication using Visual Studio MVC application

Let’s see how we can access Office 365 resources from a standard MVC application which could be hosted on any web server

Continue reading “Office 365 Authentication using Visual Studio MVC application”