Pergunta

Eu estou tentando Quebrar a Herança de uma sub-pasta dentro de um Conjunto de Documentos usando o seguinte código.Depois de executar o código e examinar o Conjunto de Documentos da Pasta de Sub-rotina, eu posso ver que ele ainda herda do pai.Qualquer pessoa pode ver o que está errado aqui?

using(var site = new SPSite("http://tmtech-sp13b:8080/sites/Doc%20Set%20Test")) {
 // TODO: Replace with current site
 using(var web = site.AllWebs[0]) {
  SPList list = web.Lists["Projects"];

  // Test if list has project document set content type
  if (list.ContentTypes.Cast < SPContentType > ().Any(c => c.Parent.Id == _projContentTypeId)) {

   foreach(SPFolder projfolder in list.RootFolder.SubFolders) {
    if (projfolder.Name.ToLower() != "forms") {
     Console.WriteLine(projfolder.Name);

     // Container to hold the temporary files which are to be deleted.
     List < SPFile > files2Delete = new List < SPFile > ();

     foreach(SPFolder projSubFolder in projfolder.SubFolders) {
      // Set Contractor Permissions
      if (projSubFolder.Name == CONTRACTOR_FOLDER_NAME) {

       SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal) web.SiteGroups["Contractors"]);

       SPFolder f = web.GetFolder(projSubFolder.Item.Url);
       SPListItem i = f.Item;
       i.BreakRoleInheritance(true);

       roleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions["Contribute"]);
       i.RoleAssignments.Add(roleAssignment);

       web.AllowUnsafeUpdates = true;
       i.Update();
       web.Update();
       web.AllowUnsafeUpdates = false;
      }

      // Capture the temporary files
      foreach(SPFile file in projSubFolder.Files) {
       if (file.Name.ToLower().Contains("temporary document delete me")) {
        files2Delete.Add(file);
       }
      }
     }

     // Delete Temporary Files
     foreach(SPFile f in files2Delete) {
      f.Delete();
      f.ParentFolder.Update();
     }
    }
   }
  }
 }
}
Foi útil?

Solução

Você vai querer usar eu.BreakRoleInheritance(falso) sobre este, em vez de verdade.

A partir desta:https://social.technet.microsoft.com/forums/sharepoint/en-US/313effab-a5af-4fda-b39c-37f620fe95f2/itembreakroleinheritancetrue-vs-itembreakroleinheritancefalse

"

Quando você chamar SPItem.BreakRoleInheritance(verdadeiro), o que você está atribuindo o item de lista com permissões exclusivas, ao copiar as permissões existentes na lista para o item.Qualquer novo permissões adicionadas ao item são aplicadas apenas para o item.

Quando você chamar SPItem.BreakRoleInheritance(falso), você está atribuindo o item de lista com permissões exclusivas.Permissões existentes na lista NÃO são copiados para o item da lista.Qualquer novo permissões adicionadas ao item são aplicadas apenas para o item.

"

Outras dicas

Seu código deve trabalhar a partir do que eu posso ver, ainda não testei.Mas você usa i.BreakRoleInheritance(true); ou seja , cópia de todas as permissões que ele tem antes de dividir a herança (do pai).Tem certeza de que não dizer "Esta pasta tem permissões exclusivas." quando você verificar a permissão do Subpastas na GUI?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top