Call MainMethod with necessary parameters.
It will copy the folder level/file level broken permissions.
It will copy the folder level/file level broken permissions.
public void MainMethod(string siteCollURL, string sourceRelativeURL, string destinationRelativeURL, string sourceLibName, string destinationLibName) { try { using (SPSite site = new SPSite(siteCollURL)) { using (SPWeb sourceWeb = site.AllWebs[sourceRelativeURL]) { using (SPWeb targetWeb = site.AllWebs[destinationRelativeURL]) { SPList sourceList = sourceWeb.Lists.TryGetList(sourceLibName); SPList targetList = targetWeb.Lists.TryGetList(destinationLibName); if (sourceList != null && targetList != null) { CopySecurity(sourceList, targetList, targetWeb, true, false); } } } } } catch (Exception ex) { } }
public static void CopySecurity(SPList sourceList, SPList targetList, SPWeb targetWeb, bool includeItemSecurity, bool quiet) { if (!quiet) { LogEntry(string.Format("Start Time: {0}.", DateTime.Now.ToString())); } try { if (sourceList.WriteSecurity != targetList.WriteSecurity) targetList.WriteSecurity = sourceList.WriteSecurity; if (sourceList.ReadSecurity != targetList.ReadSecurity) targetList.ReadSecurity = sourceList.ReadSecurity; SetFolderSecurity(targetWeb, sourceList, targetList, quiet); } catch (Exception ex) { } finally { if (!quiet) LogEntry(string.Format("Finish Time: {0}.\r\n", DateTime.Now.ToString())); } }
public static void SetFolderSecurity(SPWeb targetWeb, SPList sourceList, SPList targetList, bool quiet) { foreach (SPListItem sourceFolder in sourceList.Folders) { SPListItem targetFolder = null; foreach (SPListItem f in targetList.Folders) { if (f.Folder.ServerRelativeUrl.Substring(targetList.RootFolder.ServerRelativeUrl.Length) == sourceFolder.Folder.ServerRelativeUrl.Substring(sourceList.RootFolder.ServerRelativeUrl.Length)) { targetFolder = f; break; } } if (targetFolder == null) continue; CopyRoles(sourceFolder, targetFolder); } }
private static void CopyRoles(SPListItem source, SPListItem taget) { if (source.HasUniqueRoleAssignments) { if (!taget.HasUniqueRoleAssignments) taget.BreakRoleInheritance(false); for (int i = taget.RoleAssignments.Count - 1; i >= 0; i--) taget.RoleAssignments.Remove(i); foreach (SPRoleAssignment role in source.RoleAssignments) { //if role contains only "Restricted access" permission level if (role.RoleDefinitionBindings.Count == 1 && role.RoleDefinitionBindings[0].Type == SPRoleType.Guest) { taget.RoleAssignments.Add(role.Member); } else taget.RoleAssignments.Add(role); } taget.SystemUpdate(false); } // check items in the folder foreach (SPFile sourceFile in source.Folder.Files) { if (sourceFile.Item.HasUniqueRoleAssignments) { foreach (SPFile destFile in taget.Folder.Files) { if (sourceFile.Name == destFile.Name) { // do copy permissions CopyRoles2(sourceFile.Item, destFile.Item); break; } } } } }
private static void CopyRoles2(SPListItem source, SPListItem taget) { if (source.HasUniqueRoleAssignments) { if (!taget.HasUniqueRoleAssignments) taget.BreakRoleInheritance(false); for (int i = taget.RoleAssignments.Count - 1; i >= 0; i--) taget.RoleAssignments.Remove(i); foreach (SPRoleAssignment role in source.RoleAssignments) { //if role contains only "Restricted access" permission level if (role.RoleDefinitionBindings.Count == 1 && role.RoleDefinitionBindings[0].Type == SPRoleType.Guest) { taget.RoleAssignments.Add(role.Member); } else taget.RoleAssignments.Add(role); } taget.SystemUpdate(false); } }
No comments:
Post a Comment