Skip to content

Instantly share code, notes, and snippets.

@durgesh97025
Created July 27, 2017 11:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save durgesh97025/a288d4cc623654b4a9dbaabe7a248e04 to your computer and use it in GitHub Desktop.
Save durgesh97025/a288d4cc623654b4a9dbaabe7a248e04 to your computer and use it in GitHub Desktop.
Manage Item Permission, Break, Assign New Role, Remove Existing Role
function PreSaveAction(){
var status = $("[Title~='Status']").val();
if (status == "Final"){
var groupName = "XXX Owners"
PermissionManager.BreakInheritance().then(function(data){
console.log("Permission Inheritance Breaked with roles and groups");
}).fail(function(error){
console.log(error);
}).then(function (){
return PermissionManager.RoleAssignments();
}).then(function (data){
$.each(data.value,function(i,v){
var roleSingleUrl = v["odata.id"];
console.log(v);
$.getJSON(roleSingleUrl, function(d2){
//console.log(d2);
//console.log(v.PrincipalId);
var rolDefReadId = 1073741826;
var roleAssignUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('"+_spPageContextInfo.listTitle+"')/items("+WPQ2FormCtx.ItemAttributes.Id+")/RoleAssignments";
var roleAddAssignUrl = roleAssignUrl + "/addRoleAssignment(principalid="+v.Member.Id+",roledefid=" + 1073741826 +")";
if (v.Member.Title != "POC ICTD Teams Owners"){
PermissionManager.AddReadPermission(roleAddAssignUrl).then(function(data){
//console.log("Read assigned successfully.")
}).fail(function(errorObj,b,c){
console.log(roleAddAssignUrl);
console.log(errorObj);
});
}
//Now Remove all existing permission
var roleDefUrl = d2["odata.id"]+"/RoleDefinitionBindings";
$.getJSON(roleDefUrl, function(d3){
//console.log(d3);
$.each(d3.value, function(i2,v2){
//1073741826 is read permission Id, if not read permission remove
if (v.Member.Title != "POC ICTD Teams Owners"){
console.log("Group Title: "+v.Member.Title);
if (v2.Id != 1073741826){
var roleRemoveUrl = roleAssignUrl+"/removeRoleAssignment(principalid="+v.Member.Id+",roledefid=" + v2.Id +")";
PermissionManager.RemoveOtherPermission(roleRemoveUrl).then(function(d4){
//console.log("Permission Removed");
});
}
}
});
});
});
});
});
}
return false;
}
$(document).ready(function(){
PreSaveAction();
});
var PermissionManager = {
Headers : {
"Accept": "application/json;odata=verbose",
"content-Type": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
}
,BreakInheritance : function(){
var postUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('"+_spPageContextInfo.listTitle+"')/items("+WPQ2FormCtx.ItemAttributes.Id+")/breakRoleInheritance(copyroleassignments=true,clearsubscopes=true)";
return $.ajax({
url: postUrl,
type:"POST",
headers:PermissionManager.Headers,
dataType: 'json'
})
}
, RoleAssignments: function(){
var url = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('"+_spPageContextInfo.listTitle+"')/items("+WPQ2FormCtx.ItemAttributes.Id+")/RoleAssignments";
url += "?$select=Member/Title,Member/Id&$expand=Member";
return $.getJSON(url);
}
, AddReadPermission: function(url){
return $.ajax({
url: url,
type:"POST",
headers:PermissionManager.Headers,
dataType: 'json'
});
}
, RemoveOtherPermission: function(url){
return $.ajax({
url: url,
type:"POST",
headers:PermissionManager.Headers,
dataType: 'json',
success: function(d){
console.log(d);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment