A sample JS script to set the list permission using REST api.
Steps:
- 1. Get the RoleDefinition Id.
- 2. Get the group Id from the group name.
- 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); }
);
}
);
