Requisito: haga que un subsitio de SharePoint sea de solo lectura.
¡Este método reemplaza todos los demás permisos aplicados en el subsitio con «Leer» y no se puede revertir! ¡Asegúrese de que está procediendo solo en escenarios en los que no necesita revertir el modo de solo lectura (por ejemplo, migración posterior)! Sin embargo, puede realizar una copia de seguridad de los permisos existentes. Si desea configurar la colección de sitios de solo lectura, consulte: ¿Cómo configurar una colección de sitios de SharePoint Online en modo de solo lectura?
¿Cómo hacer que un subsitio sea de solo lectura restableciendo los permisos?
A veces, es posible que deba hacer que un subsitio de SharePoint sea de solo lectura, de modo que los usuarios no puedan modificar su contenido. En este artículo, le mostraré cómo crear un subsitio de solo lectura en SharePoint.
Podemos hacer que un subsitio de SharePoint sea de solo lectura reemplazando todos los permisos de usuarios y grupos con el nivel de permiso «Lectura».
Esto establece el subsitio de solo lectura.
¡Estos métodos no controlan a los administradores de la granja, a los administradores de la colección de sitios!
PowerShell para restablecer los permisos del subsitio a solo lectura:
Aquí está SharePoint PowerShell para hacer que el subsitio sea de solo lectura:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Parameters €SubsiteURL = "https://intranet.crescent.com/legal" #Get the Subsite €Web = Get-SPWeb €SubsiteURL #Break Permission Inheritance, if not already If(!€Web.HasUniqueRoleAssignments) { €Web.BreakRoleInheritance(€true) } #Get Required Permission Levels €ReadPermission = €web.RoleDefinitions["Read"] €ViewOnlyPermission = €web.RoleDefinitions["View Only"] €LimitedAccessPermission = €web.RoleDefinitions["Limited Access"] #Add Read Permission to Role Assignment, if not added already ForEach (€RoleAssignment in €Web.RoleAssignments) { €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings If(!(€RoleDefinitionBindings.Contains(€ReadPermission) -or €RoleDefinitionBindings.Contains(€ViewOnlyPermission) -or €RoleDefinitionBindings.Contains(€LimitedAccessPermission))) { €RoleAssignment.RoleDefinitionBindings.Add(€ReadPermission) €RoleAssignment.Update() Write-host "Added Read Permissions to '€(€RoleAssignment.Member.Name)'" -ForegroundColor Green } } #Remove All permissions other than Read or Similar ForEach (€RoleAssignment in €Web.RoleAssignments) { €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings For(€i=€RoleAssignment.RoleDefinitionBindings.Count-1; €i -ge 0; €i--) { €RoleDefBinding = €RoleAssignment.RoleDefinitionBindings[€i] If( (€RoleDefBinding.Name -eq "Read") -or (€RoleDefBinding.Name -eq "View Only") -or (€RoleDefBinding.Name -eq "Limited Access") ) { Continue; } Else { €RoleAssignment.RoleDefinitionBindings.Remove(€RoleAssignment.RoleDefinitionBindings[€i]) €RoleAssignment.Update() Write-host "Removed '€(€RoleDefBinding.Name)' Permissions from '€(€RoleAssignment.Member.Name)'" -ForegroundColor Yellow } } }
Espere, ¿qué sucede si las listas, bibliotecas, carpetas o archivos en el subsitio tienen un permiso único (¡herencia rota!)? Ampliemos el script para restablecer los permisos en todos los objetos subyacentes.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Function to replace all permission levels granted with "Read" Function Reset-Permissions([Microsoft.SharePoint.SPSecurableObject]€Object) { #Add Read Permission to Role Assignment, if not added already ForEach (€RoleAssignment in €Object.RoleAssignments) { €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings If(!(€RoleDefinitionBindings.Contains(€ReadPermission) -or €RoleDefinitionBindings.Contains(€ViewOnlyPermission) -or €RoleDefinitionBindings.Contains(€LimitedAccessPermission))) { €RoleAssignment.RoleDefinitionBindings.Add(€ReadPermission) €RoleAssignment.Update() Write-host "`tAdded Read Permission to '€(€RoleAssignment.Member.Name)'" -ForegroundColor Green } } #Remove All permissions other than Read or Similar ForEach (€RoleAssignment in €Object.RoleAssignments) { €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings For(€i=€RoleAssignment.RoleDefinitionBindings.Count-1; €i -ge 0; €i--) { €RoleDefBinding = €RoleAssignment.RoleDefinitionBindings[€i] If( (€RoleDefBinding.Name -eq "Read") -or (€RoleDefBinding.Name -eq "View Only") -or (€RoleDefBinding.Name -eq "Limited Access") ) { Continue; } Else { €RoleAssignment.RoleDefinitionBindings.Remove(€RoleAssignment.RoleDefinitionBindings[€i]) €RoleAssignment.Update() Write-host "`tRemoved '€(€RoleDefBinding.Name)' Permission from '€(€RoleAssignment.Member.Name)'" -ForegroundColor Yellow } } } } #Parameters €SubsiteURL = "https://intranet.sharepoint.com/2010" #Get the Subsite €Web = Get-SPWeb €SubsiteURL #Break Permission Inheritance of the subsite, if not already If(!€Web.HasUniqueRoleAssignments) { €Web.BreakRoleInheritance(€true) } #Get Required Permission Levels €ReadPermission = €web.RoleDefinitions["Read"] €ViewOnlyPermission = €web.RoleDefinitions["View Only"] €LimitedAccessPermission = €web.RoleDefinitions["Limited Access"] #Call the function to Reset Web permissions Write-host "Resetting Permissions on Web..."-NoNewline Reset-Permissions €Web Write-host "Done!" -f Green #Array to Skip System Lists and Libraries €SystemLists [email protected]("Converted Forms", "Master Page Gallery", "Customized Reports", "Form Templates", "List Template Gallery", "Theme Gallery", "Reporting Templates", "Solution Gallery", "Style Library", "Web Part Gallery","Site Assets", "wfpub") #Loop through each list in the web Foreach (€List in €Web.Lists) { #Get only lists with unique permissions & Exclude Hidden System libraries If ((€List.Hidden -eq €false) -and (€SystemLists -notcontains €List.Title) -and (€List.HasUniqueRoleAssignments) ) { #Call the function to Reset List permissions Write-host -NoNewline "Resetting Permissions on List '€(€List.title)'..." Reset-Permissions €List Write-host "Done!" -f Green } } #Check List items with unique permissions Foreach (€List in €Web.Lists) { #Get only lists with unique permissions & Exclude Hidden System libraries If ((€List.Hidden -eq €false) -and (€SystemLists -notcontains €List.Title)) { #Get All list items with unique permissions €UniqueItems = €List.GetItemsWithUniquePermissions() If(€UniqueItems.count -gt 0) { #Call the function to Reset List Item permissions Write-host "Resetting Permissions on List Items of '€(€List.title)'" €UniqueItems | ForEach-Object { Reset-Permissions €List.GetItemById(€_.ID) } } } }
Aquí hay otra publicación sobre cómo configurar la lista de SharePoint en modo de solo lectura: ¿Cómo hacer que una lista o biblioteca de SharePoint esté en modo de solo lectura usando PowerShell?