BreakRoleInerItance (TRUE) non ha alcun effetto sulle sottocartelle Set Document
-
10-12-2019 - |
Domanda
Sto cercando di interrompere l'ereditarietà su una sottocartella all'interno di un set di documenti utilizzando il seguente codice.Dopo aver eseguito il codice e esaminare la sottocartella del set di documenti che posso vedere che eredita ancora dal genitore.Qualcuno può vedere cosa c'è di sbagliato qui?
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();
}
}
}
}
}
}
. Soluzione
You'll want to use i.BreakRoleInheritance(false) on this one, instead of true.
"
When you call SPItem.BreakRoleInheritance(true), you are assigning the list item with unique permissions, while copying existing permissions on the list to the item. Any new permissions added to the item are only applied to the item.
When you call SPItem.BreakRoleInheritance(false), you are assigning the list item with unique permissions. Existing permissions on the list are NOT copied to the list item. Any new permissions added to the item are only applied to the item.
"
Altri suggerimenti
Your code should work from what I can see, haven't tested it. But you use i.BreakRoleInheritance(true);
, meaning it will copy all the permissions it has before breaking the inheritance (from the parent). Are you sure it does not say "This folder has unique permissions." when you check the permission of the SubFolders in the GUI?