Domyślnie, listy i ich zawartość dziedziczą grupy i poziomy uprawnień strony nad nimi w hierarchii — oznacza to, że lista dziedziczy uprawnienia ze strony gdzie się znajduje, a strona z kolei dziedziczy uprawnienia ze swojej nadrzędnej witrynyJeśli wprowadzisz zmiany w uprawnieniach witryny nadrzędnej, jej podwitryny, listy i ich zawartość automatycznie zmienią swoje uprawnienia.1  


Dziedziczenie uprawnień jest często zatrzymywane, ponieważ nie wszyscy użytkownicy witryny powinni mieć dostęp do wszystkich list i wszystkich dokumentów na stronie. Jest to często podyktowane względami bezpieczeństwa, np. lista zawiera poufne dane i należy ograniczyć liczbę osób, które mogą ją zobaczyć. Strona kwitnie, liczba list i bibliotek wzrasta, aż ostatecznie uzyskujemy setki list z unikatowymi uprawnieniami, które nie są już potrzebne.


Czas, aby zacząć na nowo? 


Zatrzymanie uprawnień nie jest wyborem ostatecznym - nie musisz trzymać się go do końca istnienia listy. W każdej chwili można i należy je zmienić, jeśli nie są już potrzebne. Za pomocą jednego przycisku, można przywrócić dziedziczenie uprawnień z elementem nadrzędnym (strony) i teraz każde zmiany zastosowane do witryny, zreplikują się również do listy.





 
Uwaga - Jeśli chcesz wznowić dziedziczenia uprawnień, możesz stracić unikatowe ustawienia uprawnień nadane tylko dla danej listy.



Ha, tu się pojawia Przeszkoda


Masz sto list? Cóż, czeka Cię sto kliknięć. Obecnie przy użyciu graficznego interfejsu użytkownika nie ma opcji, aby usunąć unikatowe uprawnienia dla więcej niż jednego elementu. Zatem, czy jest to lista, witryna lub element, trzeba ustawić każde z osobna. SharePoint Online Management Shell z 30 + poleceniami również nam nie pomoże (jeszcze nie, być może w przyszłości :))

Przejdźmy zatem do skryptów.

CSOM jest skrótem od client-side object model (model obiektowy po stronie klienta), który umożliwia uwierzytelnianie do usługi SharePoint Online i wykonywanie operacji na jego elementach. Otwórzmy Powershell ISE i spójrzmy na to z perspektywy Powershella:

1. Potrzebne nam będzie zainstalowane SharePoint Online SDK 

2. Po zainstalowaniu SDK, należy umieścić referencję do niego w skrypcie:

# Paths to SDK. Please verify location on your computer.
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

3. Tworzenie kontekstu dla operacji. Adres url odwołuje się do witryny, gdzie znajdują się listy. Może to być zbiór witryn lub jedna z podwitryn.

$ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url)

4. Dodaj poświadczenia administratora. Nie można wykonać operacji na stronie, do której nie masz uprawnień! 
Hasło musi być typu SecureString.
$password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force
$ctx.Credentials = New-ObjectMicrosoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password)

5. Teraz trzeba załadować elementy, na których chcesz wykonywać operacje  

$ctx.Load($ctx.Web.Lists)
$ctx.Load($ctx.Web)
$ctx.ExecuteQuery()

6. ExecuteQuery() wykonuje operacje, które podałeś w linii powyżej. Ta metoda wirtualna jest "synchroniczna", co oznacza, że wykonanie kodu jest zablokowane do momentu otrzymania odpowiedzi z serwera. Jeżeli obiekt wywołujący nie chce być zablokowany i obiekt wywołujący jest zarządzany, obiekt wywołujący powinien wywołać ExecuteQueryAsync().

7. Teraz stwórzmy prostą pętlę foreach :

foreach( $ll in $ctx.Web.Lists)
  {             
        $ll.BreakRoleInheritance($true, $false)
        $ll.Update()


8. Należy zauważyć, że nie zamknęłam jeszcze pętli. To dlatego, że aby wykonać tę operację potrzebujemy.ExecuteQuery().

$ctx.ExecuteQuery()

9. A co się stanie, jeśli otrzymamy błąd? Co zrobić, jeśli lista nie obsługuje zmiany uprawnień, np. "appdata" lub "Composed Looks"? Musimy zapewnić  obsługę błędów. Try-catch zrobi to dla nas.

try
        {
        $ctx.ExecuteQuery()
        }
catch
        {
 
        }

10. Ponieważ byłoby fajnie, aby poinformować użytkownika (lub nas samych), czy operacja zakończyła się pomyślnie, możemy dodać prosty Write-Host , który wyświetli nam odpowiednią informację w Powershellu:

Write-Host "Deleted unique permissions for " $ll.Title


11. I pełna pętla:

foreach( $ll in $ctx.Web.Lists)
  {            
    $ll.ResetRoleInheritance()
    $ll.Update()
 
        try
        {
        $ctx.ExecuteQuery()
        Write-Host "Deleted unique permissions for " $ll.Title
        }
        catch
        {
        Write-Host "Failed to restore permissions for " $ll.Title
        }
        
}



Można zobaczyć pełen skrypt tutaj

Powiązane skrypty:

Zatrzymaj dziedziczenie na wszystkich listach

Modyfikowanie uprawnień do witryny SharePoint Online (moduł)

Modyfikowanie listy uprawnień za pomocą polecenia cmdlet środowiska Powershell (moduł)

Usunąć uprawnienia unikatowe (program C#)

Pobierz listy z unikatowymi uprawnieniami (program C#)



Inne języki

Ten artykuł jest dostępny również w innych językach:
Wiki: Delete unique permissions in multiple lists using CSOM