JSOM - Sharepoint - 如何在打破继承后删除列表项的所有权限?

JSOM - Sharepoint - How to remove all permissions on an item of a list after breaking the inheritance?

我正在尝试在共享点页面上添加脚本以帮助用户管理权限。

脚本必须打破继承(没问题)并更改库中某些文档集的权限(有问题)。

要管理权限,我必须在打破继承后做两件事:删除所有现有组(问题)和添加特定组(没问题)。

问题在于删除所有现有组。我无法获取文档集的组列表,无论他们拥有何种类型的授权,也无法将其删除。

这是我的脚本:

_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 项的分配(继承已经中断,因为我已经 运行 脚本)。

感谢帮助

方法breakRoleInheritance有两个参数的重载,所以你可以这样使用它:

docSetItem.breakRoleInheritance(true, true);

这将打破权限继承并删除所有权限。