Administrer les droits des dossiers partagés SPO via powershell

Copper Contributor

Bonjour, 

 

Je dispose d'un SPO dans lequel des dossiers (et sous-dossiers) ont été disposés (actuellement aucun document présent à l'intérieur).

l'héritage des droits du SharePoint a été retiré car chaque dossier à la racine des "documents partagés" sera administré par un Groupe de Sécurité qui lui appartient.

Cependant, afin que l'arborescence des dossiers ne soit pas "malencontreusement" détruite par d'éventuelles erreurs humaines des membres de ces groupes, nous souhaitons que chaque dossier soit en lecture seule hormis chaque dernier dossier de l'arborescence.

(Grand-Parents en Lecture, Parent en Lecture, enfant en Lecture/ecriture en quelques sorte).

 

La quantité de dossier en place représente 6 414 dossiers ce qui, vous vous en doutez ne peux se faire à la main.

 

Je suis donc à la recherche de commande qui pourrait me permettre de faire cette action en powershell.

 

Pourriez-vous m'aider svp ?

 

En pj : un exemple de l'arborescence pour que ce soit plus ... parlant ! 

 

Merci beaucoup aux contributeursCapture d’écran 2023-07-24 142615.jpg

 

2 Replies

Hi @ViriisXP,

thanks for your question, I don't speak French so I will try to help you in English.

To achieve the permission settings you described for your SharePoint Online (SPO) folders and subfolders using PowerShell (if I translated it properly), you can use the SharePoint Online Management Shell.

Before running the script, make sure you have installed the SharePoint Online Management Shell and connected to your SharePoint Online environment.

You can download SharePoint Online Management Shell here: 
Download SharePoint Online Management Shell from Official Microsoft Download Center

Here's a PowerShell script that sets the permissions for each folder and its subfolders as you mentioned:

# Connect to SharePoint Online
Connect-SPOService -Url https://yourtenantname-admin.sharepoint.com

# Set the root URL of your document library
$rootUrl = "https://yourtenantname.sharepoint.com/sites/sitename/Shared Documents"

# Function to set folder permissions
function Set-FolderPermissions {
param (
[Microsoft.SharePoint.Client.Folder]$folder,
[Microsoft.SharePoint.Client.RoleType]$permissionLevel
)
$ctx = $folder.Context
$folder.ListItemAllFields.BreakRoleInheritance($true, $false)
$ctx.Load($folder.ListItemAllFields.RoleAssignments.Add($folder.ParentList.ParentWeb.SiteGroups.GetByName("YourReadOnlyGroup"), $permissionLevel))
$folder.Context.ExecuteQuery()
}

# Function to recursively set permissions for folders and subfolders
function Set-PermissionsRecursively {
param (
[Microsoft.SharePoint.Client.Folder]$folder
)
$ctx = $folder.Context
$ctx.Load($folder.Folders)
$ctx.Load($folder.ListItemAllFields)
$ctx.ExecuteQuery()

# Set permission for the current folder
Set-FolderPermissions -folder $folder -permissionLevel [Microsoft.SharePoint.Client.RoleType]::Read

# Recursively set permissions for subfolders
foreach ($subfolder in $folder.Folders) {
Set-PermissionsRecursively -folder $subfolder
}
}

# Main script
$ctx = Get-SPOContext

# Get the root folder
$rootFolder = $ctx.Web.GetFolderByServerRelativeUrl($rootUrl)
$ctx.Load($rootFolder)
$ctx.ExecuteQuery()

# Set permissions recursively for each folder and its subfolders
Set-PermissionsRecursively -folder $rootFolder

 

You will need to modify the script by replacing `https://yourtenantname.sharepoint.com/sites/sitename/Shared Documents` with the actual URL of your document library. Also, replace `"YourReadOnlyGroup"` with the name of the security group that should have read-only access.

 

Please click Mark as Best Response & Like if my post helped you to solve your issue.
This will help others to find the correct solution easily. It also closes the item.


If the post was useful in other ways, please consider giving it Like.


Kindest regards,


Leon Pavesic

Bonjour @LeonPavesic (désolé je réponds avec mon compte pro), il semblerait si je comprends bien, que chaque dossiers disposera des mêmes droit que son parent ?

 

Ce que je souhaite c'est que

  • Si  le dossier n'a plus de sous-dossier, alors les droits attribués sont "Modifier".
  • Si le dossier a un sous-dossier, alors les droits attribués sont "Lecture" (+ recursive en effet) .

Si je reprends l'exemple de la capture : 

S1Lecture
S1D1Modification
S1D2Modification
S1D3Modification
S1D4Modification
........
S2Lecture
S2D1Lecture
S2D1SSD1Modification
S2D1SSD2Modification
........
S2D1SSD5Lecture
S2D1SSD5E1Modification
S2D1SSD5E2Modification
......

 

 

Je suis vraiment désolé si je ne suis pas assez clair. :\

 

Merci énormément pour l'aide ! Thx