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); } ); } );