2016-09-16 2 views
0

Ich stoße auf das folgende Szenario, bei dem ich nicht sicher bin, wie ich es angehen soll.SharePoint-Listenelement: Kopieren von Berechtigungen auf Listenelementebene von einem Element zum anderen

Ich muss in der Lage sein, die Berechtigungen auf Listenelementebene von einem Listenelement in ein anderes in einer separaten Liste zu kopieren. Mit anderen Worten:

Liste A enthält einen Artikel mit dem Namen itemA. Liste B enthält einen Artikel mit der Bezeichnung itemB. Ich möchte die Freigaben von itemA auf Artikelebene in itemB duplizieren.

Kennt jemand einen Weg, dies zu tun? Dies kann mit Front-End-Code über JSOM oder mit einem Workflow (2010 oder 2013) geschehen.

Dinge, die ich habe schon versucht:

  • Die "Inherit Eltern Berechtigungen" Workflow-Aktion. Ich möchte jedoch die Arbeitsablaufberechtigungen von einem anderen Listenelement erben, nicht von der Liste selbst.
  • Mein Szenario ist ähnlich zu diesem: Inheriting list item permissions via permissions on lookup field item. Abgesehen davon, dass ich keine Event-Empfänger erstellen kann, suche ich nach einer JSOM- oder Workflow-Lösung.

Antwort

1

Das folgende Beispiel zeigt, wie Listenelement Berechtigungen über SharePoint JSOM API kopieren:

Voraussetzungen:

Einzigartige Berechtigungen sollten für Quell- und Ziellistenelemente

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()); 
     } 
    ); 
}); 
zugeordnet werden

wo

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 
    ); 
} 
+0

Vielen Dank! Das scheint fast der Trick zu sein. Allerdings bekomme ich diesen JavaScript-Fehler beim Versuch, den Code: 'Kann nicht finden, der Auftraggeber mit ID: 11.' Irgendwelche Ideen? –

Verwandte Themen