SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Berechtigungen der Nutzergruppen auf Listenebene verändern / Powershell

Geprüfte Antwort Dieser Beitrag hat 3 Antworten

Ohne Rang
282 Beiträge
MStel erstellt 20 Aug. 2015 08:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe mehrere Listen auf meiner SharePoint Seite mit PowerShell eingerichtet.
Für eine bessere Verwaltung habe ich Nutzergruppen mit  Lese und Schreibrechten angelegt.

Ich habe eine Nutzergruppe"Personen mit Leserechten" welche bisher alles abgedeckt hat. Da diese Personen aber nun in einer neuen Liste auch Einträge anlegen sollen, brauchen diese nur auf dieser einen Liste das Recht mitwirken.

Besteht die Möglichkeit nur auf Listenebene Berechtigungen hinzuzufügen, ohne dass die Nutzergruppe das Recht auch für andere SP Objekte/Listen erhält?

Dass man die Vererbung auf Listenebene unterbrechen kann weiß ich bereits, allerdings weiß ich nicht wie man eine bestehende Nutzergruppe auswählt und beispielsweise Berechtigungen hinzufügt.(PowerShell Skript)
SPWeb.SiteGroups oder SPWeb.Groups funktioniert bei mir seltsamerweise nicht.

Fehler beim Aufrufen der Methode, da [Microsoft.SharePoint.SPWeb] keine Methode mit dem Namen "Site
Groups" enthält.

Danke im Vorraus.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 Aug. 2015 09:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="MStel"]Besteht die Möglichkeit nur auf Listenebene Berechtigungen hinzuzufügen, ohne dass die Nutzergruppe das Recht auch für andere SP Objekte/Listen erhält?[/quote]

Klar geht das :-)

[quote user="MStel"]SPWeb.SiteGroups oder SPWeb.Groups funktioniert bei mir seltsamerweise nicht[/quote]

Das sind Instanzmethoden, d.h. sie funktionieren nur auf einer Instanz, nicht auf dem Klassennamen.

Ändern der Berechtigungen per Code ist nicht ganz einfach. Suche am besten nach Beispielen in C# und übersetze die dann für PowerShell. Es funktioniert aber für alle Objekte immer gleich, d.h. es ist egal, ob Du Berechtigungen für ein Web, eine Liste oder ein Listenelement änderst. Die erben alle von SPSecurableObject und verhalten sich diesbezüglich identisch. Man ändert immer die RoleAssignments.

Hier ein paar Suchworte: https://www.google.de/search?q=sharepoint+programmatically+manage+permissions

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 20 Aug. 2015 09:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nach ein bisschen herumprobieren habe ich es tatsächlich geschafft.

$web = Get-SPWeb $meinWeb
$list = $web.Lists["zuBearbeitendeListe"]
$groups = $web.SiteGroups

foreach($group in $groups)
{
 if ( $group.Name = "Leserechte")
 {
  $Leserechte= $groups.GetByID($group.ID)
  $list.BreakRoleInheritance($true,$false)
  $role = $web.RoleDefinitions["Mitwirken"]
  $assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($Leserechte)
    $assignment.RoleDefinitionBindings.Add($role)
  $list.RoleAssignments.Add($assignment)
  $list.Update()
 }

}

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 Aug. 2015 10:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nurf ein paar Anmerkungen:

Statt foreach group und dann prüfen auf den Namen kannst Du auch gleich sowas schreiben:
$group = $groups["Name"]

Die Zeile $leserechte = $groups.GetByID($group.ID) ist vollkommen sinnlos. Du holst damit nur dieselbe Objektinstanz nochmal.

Und das $list.Update() nach dem Setzen der Berechtigungen kann man weglassen. Berechtigungen werden immer sofort gespeichert, hier also beim RoleAssignments.Add(). Keine Ahnung, warum Microsoft das an dieser Stelle anders implementiert hat.

Viele Grüße
Andi
af @ evocom de
Blog