次の例では、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のプリンシパルが見つかりません。 ' アイデア? –