【问题标题】:SharePoint list item: Copy list-item-level permissions from one item to anotherSharePoint 列表项:将列表项级别权限从一项复制到另一项
【发布时间】:2016-09-17 18:21:13
【问题描述】:

我遇到了以下情况,我不确定如何解决。

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

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

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

我已经尝试过的事情:

【问题讨论】:

    标签: javascript inheritance sharepoint permissions workflow


    【解决方案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   
        );
    }
    

    【讨论】:

    • 非常感谢!这似乎可以解决问题。但是,我在尝试代码时确实收到了这个 JavaScript 错误:Can not find the principal with id: 11. 有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2018-05-31
    • 2017-12-14
    相关资源
    最近更新 更多