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

时间:2017-07-26 15:40:23

标签: javascript sharepoint sharepoint-jsom

我尝试在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项目的分配(继承已经被破坏,因为我已经运行了脚本)。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

docSetItem.breakRoleInheritance(true, true);

这会破坏权限继承并删除所有权限。