2014-07-17

A sample JS script to set the list permission using REST api.

Steps:

  1. 1. Get the RoleDefinition Id.
  2. 2. Get the group Id from the group name.
  3. 3. Set the list permission using the RoleDefinitionId, Group Id.

Note:

  • 1. The script selects only the relevant properties instead of retrieving the full list of object properties.
  • ex: url: _spPageContextInfo.webAbsoluteUrl+ “/_api/web/sitegroups/getbyname(‘” + groupName + “‘)?$select=Id”,
  • 2. Using nometadata option for REST api. (More details can be found on Vardhaman Deshpande’s blog).
  • 3. Using the Jquery $.Deferred to handle the asynchronous call.

Script:

function setListPermission(listTitle, roleDefinitionId, groupId)
{
 
    var deferred = $.Deferred();
    var executor = new SP.RequestExecutor(_spPageContextInfo.webAbsoluteUrl);
    executor.executeAsync(
        {
            url: _spPageContextInfo.webAbsoluteUrl+ "/_api/web/lists/getbytitle('" + listTitle + "')/roleassignments/addroleassignment(principalid=" + groupId + ",roledefid=" + roleDefinitionId + ")",
            method: "POST",
            headers: { "Accept": "application/json; odata=nometadata" },
            success: function(data){
        deferred.resolve(data);    
        },
            error: function(data, errorCode, errorMessage){
            deferred.reject(data,errorCode,errorMessage);    
        }
        }
        );
 
    return deferred.promise();        
}
 
function getGroupId(groupName)
{
    var deferred = $.Deferred();
    var executor = new SP.RequestExecutor(_spPageContextInfo.webAbsoluteUrl);
    var groupId;
    var roleDefinitionId;
    executor.executeAsync(
 
        {
            url: _spPageContextInfo.webAbsoluteUrl+ "/_api/web/sitegroups/getbyname('" + groupName + "')?$select=Id",
            method: "GET",
            headers: { "Accept": "application/json; odata=nometadata" },
            success: function(data){
        var jsonGroupDetails = JSON.parse(data.body);
        groupId = jsonGroupDetails.Id;
        deferred.resolve(groupId);
        },
           error: function(data, errorCode, errorMessage){
                deferred.reject(data,errorCode,errorMessage);                
            }
    });
    return deferred.promise();
}
 
function getRoleDefinitionId(roleDefinition)
{
    var deferred = $.Deferred();
    var executor = new SP.RequestExecutor(_spPageContextInfo.webAbsoluteUrl);
    executor.executeAsync(
        {
            url: _spPageContextInfo.webAbsoluteUrl+ "/_api/web/roledefinitions/getbyname('"+ roleDefinition + "')?$select=Id",
            method: "GET",
            headers: { "Accept": "application/json; odata=nometadata" },
            success: function(data){
                var jsonRoleDefinition = JSON.parse(data.body);
                deferred.resolve(jsonRoleDefinition.Id);
 
            },
            error: function(data, errorCode, errorMessage){
                deferred.reject(data,errorCode,errorMessage);                
            }
        }
    );
 
    return deferred.promise();
}
 
function setPermission()
{
    getRoleDefinitionId('Contribute').then(function(roleDefinitionId){
        getGroupId('<<Group name>>').then(function(groupId){
            setListPermission('<<List name>>', roleDefinitionId, groupId).then(function(data){},function(data, errorCode, errorMessage){});
        },function(data, errorCode, errorMessage){});
    },function(data, errorCode, errorMessage){});
 
}
 
function customisePermission()
{
    setPermission();
}
 
 
var scriptbase = _spPageContextInfo.webAbsoluteUrl + "/_layouts/15/";
$.getScript(scriptbase + "SP.Runtime.js",
    function () {
        $.getScript(scriptbase + "SP.js",
            function () { $.getScript(scriptbase + "SP.RequestExecutor.js", customisePermission); }
        );
    }
);

 

About the author 

Balamurugan Kailasam