我尝试在sharepoint页面上添加脚本以帮助用户管理权限。
脚本必须中断继承(没问题)并更改库中某些文档集的权限(问题)。
要管理权限,我必须在打破继承后做两件事:删除所有现有的组(问题)并添加特殊组(没问题)。
问题在于删除所有现有组。我无法获取组的列表,无论他们有什么类型的autorisations,都可以获取docset并删除它们。
这是我的剧本:
_spBodyOnLoadFunctionNames.push("doTheStuff");
function doTheStuff()
{
$('#managePermissionsDocSets').click(function(e){
e.preventDefault();
managePermissions();
});
}
function managePermissions()
{
// The library full of docsets
var ListDocSets = "LibraryWithDocSets";
this.context = new SP.ClientContext.get_current();
this.website = context.get_web();
this.collListItem = website
.get_lists()
.getByTitle(ListDocSets)
.getItems('');
context.load(website);
context.load(collListItem);
context.executeQueryAsync(
Function.createDelegate(this, this.stopInheritance),
Function.createDelegate(this, this.onQueryFailed)
);
}
function stopInheritance(sender, args)
{
context = new SP.ClientContext.get_current();
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext())
{
docSetItem = listItemEnumerator.get_current();
if(docSetItem.get_item("Title"))
{
docSetItem.breakRoleInheritance(true);
var docSetItemPermsEnumerator = docSetItem.get_roleAssignments().getEnumerator();
while (docSetItemPermsEnumerator.moveNext())
{
rAssignmentMember = docSetItemPermsEnumerator.get_current().get_member();
//console.log(rAssignment.get_member().get_id() );
context.load(docSetItem);
context.load(rAssignmentMember, "Title", "Id");
this.context.executeQueryAsync(
Function.createDelegate(this, removeAssignment),
Function.createDelegate(this, this.onQueryFailed)
);
//docSetItem.get_roleAssignments().remove(rAssignment);
}
//context.load(docSetItem);
this.context.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed)
);
}
else
{
console.log("No title");
}
}
}
function removeAssignment(sender, args)
{
var context = new SP.ClientContext.get_current();
var web = context.get_web();
console.log(docSetItem);
console.log(rAssignmentMember.get_id());
docSetItem.get_roleAssignments().remove(rAssignment.get_id());
this.context.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed)
);
}
function onQuerySucceeded(sender, args) {
console.log("Success");
/*console.log(sender);
console.log(args);*/
}
function onQueryFailed(sender, args) {
console.log('Request failed. ' + args.get_message() +
'\n' + args.get_stackTrace());
}
我尝试了很多东西。在这一个中,我尝试删除每个docset项目的分配(继承已经被破坏,因为我已经运行了脚本)。
感谢您的帮助
答案 0 :(得分:0)
方法breakRoleInheritance有重载,它带有两个参数,所以你可以像这样使用它:
docSetItem.breakRoleInheritance(true, true);
这会破坏权限继承并删除所有权限。