SharePoint列表项目:将列表项目级权限从一个项目复制到另一个项目
问题描述:
我遇到以下情形,我不确定如何处理。SharePoint列表项目:将列表项目级权限从一个项目复制到另一个项目
我需要能够将列表项级权限从一个列表项复制到另一个列表中的另一个列表项。换句话说:
列表A包含一个项目名为itemA。清单B包含一个名为itemB的物品。我想将itemA的item-level权限复制到itemB中。
有没有人知道一种方法来做到这一点?这可以通过使用JSOM的前端代码或工作流(2010或2013)来实现。
事情我已经尝试:
- 的 “继承父权限” 工作流程操作。但是,我想从其他列表项中继承工作流权限,而不是从列表本身继承。
- 我的场景与此类似:Inheriting list item permissions via permissions on lookup field item。除了我没有能力构建事件接收器,所以我正在寻找JSOM或工作流解决方案。
答
下面的例子演示了如何通过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错误: '无法找到ID为11的主体:' 任何想法? –