SharePoint列表项:将列表项级别权限从一个项目复制到另一个项目

时间:2016-09-16 21:03:23

标签: javascript inheritance sharepoint permissions workflow

我遇到了以下情况,我不确定如何处理。

我需要能够将列表项级别权限从一个列表项复制到另一个列表项中的另一个列表项。换句话说:

列表A包含名为 itemA 的项目。列表B包含名为 itemB 的项目。我想将itemA的项级别权限复制到itemB。

有谁知道这样做的方法?这可以使用JSOM的前端代码,也可以使用工作流(2010或2013)。

我已经尝试过的事情:

1 个答案:

答案 0 :(得分:1)

以下示例说明如何通过SharePoint JSOM API复制列表项权限:

  

先决条件:

     

应为源列表和目标列表项分配唯一权限

SP.SOD.executeFunc('SP.js', 'SP.ClientContext',
function(){
    var ctx = SP.ClientContext.get_current();
    var sourceListItem = ctx.get_web().get_lists().getByTitle("InTasks").getItemById(1);
    var targetListItem = ctx.get_web().get_lists().getByTitle("OutTasks").getItemById(1);
    copyListItemPermissions(sourceListItem,targetListItem,
       function(){
         console.log("Done");
       },
       function(sender,args){
         console.log(args.get_message());
       }
    );
});

,其中

function copyListItemPermissions(sourceListItem,targetListItem,success,error)
{
    var ctx = targetListItem.get_context();
    var sourceItemPermissions = sourceListItem.get_roleAssignments();
    var targetItemPermissions = targetListItem.get_roleAssignments();
    ctx.load(sourceItemPermissions,'Include(Member)');
    ctx.load(targetItemPermissions,'Include(Member)');
    ctx.executeQueryAsync(
       function(){

           targetItemPermissions.get_data().forEach(function(targetAssignment){
              targetAssignment.deleteObject();
           });

           sourceItemPermissions.get_data().forEach(function(sourceAssignment){
               var principal = sourceAssignment.get_member();
               if(principal.get_principalType() == 1)
                   targetItemPermissions.add(principal,sourceAssignment.get_roleDefinitionBindings());
               else if (principal.get_principalType() == 8){
                   var group = ctx.get_web().get_siteGroups().getById(principal.get_id());
                   targetItemPermissions.add(group,sourceAssignment.get_roleDefinitionBindings());
               }    
           });
           targetListItem.update();
           ctx.executeQueryAsync(
               function(){
                  success();       
               },
               error   
           );             
       },
       error   
    );
}