Сегодня поступила задача изменить права в библиотеке. Т.е. нужно назначить права на каждую папку в корне библиотеке и права на две вложенные папки.
Результат прав для папки верхнего уровня
структура такова:
Библиотека
документов
|
|
|- Вендор Avast
(персональные права на папку)
| |
| |-
Папка 1
| |-Маркетинговые
материалы (персональные права)
| |-Лицензионные
формы (персональные права)
| |-Папка
N
|
|- Вендор Eset
(персональные права на папку)
| |
| |-
Папка 1
| |-Маркетинговые
материалы (персональные права)
| |-Лицензионные
формы (персональные права)
| |-Папка
N
$web = Get-SPWeb http://sp-test/sites/site $lib = $web.lists["Библиотека для портала"] $rootFolder = $lib.RootFolder.SubFolders function AddPermissionToFolderGroup ($folder, $GroupName, $PermissionLevel) { Write-Host $folder "/" $GroupName "/" $PermissionLevel $group = $web.SiteGroups[$GroupName] $roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group) $roleDefinition = $web.RoleDefinitions[$PermissionLevel]; $roleAssignment.RoleDefinitionBindings.Add($roleDefinition); $folder.Item.BreakRoleInheritance($true); $folder.Item.RoleAssignments.Add($roleAssignment); } function RemooveAllFolderPermission ($folder){ $folder.Item.ResetRoleInheritance() $folder.Item.BreakRoleInheritance($false); } foreach($folder in $rootFolder){ $groupName = "Вендор "+$folder.Name # Определяем набор прав для папок $permissionsRootFolder = @( ($groupName,"Совместная работа"), ("Все пользователи","Read"), ("Технические специалисты","Совместная работа") ); $permissionsSubFolderLicenseForm = @( ("Редакторы лицензионных форм","Совместная работа"), ("Все пользователи","Read") ); $permissionsSubFolderMarketing = @( ($groupName,"Совместная работа"), ("Продуктовые маркетологи","Совместная работа"), ("Все пользователи","Read") ); # удаляем права с папки верхнего уровня RemooveAllFolderPermission $folder # назначаем права на папку верзнего уровня foreach($perm in $permissionsRootFolder){ Write-Host $perm[0] / $perm[1] AddPermissionToFolderGroup -folder $folder` -GroupName $perm[0]` -PermissionLevel $perm[1] }; foreach($subFolder in $folder.SubFolders){ if($subFolder.Name -eq "Маркетинговые материалы"){ RemooveAllFolderPermission $subFolder foreach($perm in $permissionsSubFolderMarketing){ Write-Host $perm[0] / $perm[1] AddPermissionToFolderGroup -folder $subFolder` -GroupName $perm[0]` -PermissionLevel $perm[1] }; }; if($subFolder.Name -eq "Лицензионные формы"){ RemooveAllFolderPermission $subFolder foreach($perm in $permissionsSubFolderLicenseForm ){ Write-Host $perm[0] / $perm[1] AddPermissionToFolderGroup -folder $subFolder ` -GroupName $perm[0]` -PermissionLevel $perm[1] }; }; } } $web.Dispose()Вот такой код у меня получился. Помогает быстро назначить права на большое количество папок и можно переопределить права и запустить вновь.
Результат прав для папки верхнего уровня
Комментариев нет:
Отправить комментарий