Сегодня поступила задача изменить права в библиотеке. Т.е. нужно назначить права на каждую папку в корне библиотеке и права на две вложенные папки.
Результат прав для папки верхнего уровня
структура такова:
Библиотека
документов
|
|
|- Вендор 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()
Вот такой код у меня получился. Помогает быстро назначить права на большое количество папок и можно переопределить права и запустить вновь.Результат прав для папки верхнего уровня

Комментариев нет:
Отправить комментарий