Skip to main content

SharePoint Dev und ITPro Blog

Go Search
Home
Impressum
  


SharePoint Dev und ITPro Blog > Posts > Programmatisches Setzen von Benutzerberechtigungen
Programmatisches Setzen von Benutzerberechtigungen

Das Setzen von Benutzerberechtigungen ist noch etwas dürftig beschrieben im SDK. Ich möchte deshalb hier eine Methode zeigen, wie man die Benutzerberechtigungen für einen beliebigen Benutzer für einen Eintrag in einer Liste bzw. Bibliothek setzen kann. Es wird dabei die Rolle eines Lesers an den Benutzer vergeben. Die folgende Methode erledigt dies:

public void AddReadAccessToListItem(string sitename, string listname,

                          string username, int listitem)

{

   SPWeb web = null;

   SPList list = null;

   try

   {

      using (SPSite site = new SPSite(sitename))

      {

         web = site.OpenWeb();

         list = web.Lists[listname];

         SPListItem listItem = list.Items[listitem];

         SPUser user = web.EnsureUser(username);

 

         SPRoleDefinition RoleDefinitionRdr =

                    web.RoleDefinitions.GetByType(SPRoleType.Reader);

 

         SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)user);

                    roleAssignment.RoleDefinitionBindings.Add(RoleDefinitionRdr);

         if (!listItem.HasUniqueRoleAssignments)

         {

            listItem.BreakRoleInheritance(true);

         }

 

         listItem.RoleAssignments.Add(roleAssignment);

         listItem.Update();

      }

   }

   catch (Exception ex)

   {

      throw new Exception(string.Format(

          "Fehler beim Setzen der Benutzerberchtigung für Benutzer {0}",

           username), ex);

   }

}

Aufgerufen wird die Funktion mit den folgenden Parametern:

-          sitename: Url der Site

-          listname: Titel der Liste, in dem sich der zu berechtigende Eintrag befindet

-          username:

-          listitem: ID, des Elementes, auf welches die Berechtigungen vergeben werden sollen

Interessante Punkte innerhalb der Methode sind:

-          Mit dem Aufruf EnsureUser wird sichergestellt, dass der Benutzer in den Benutzerinformationen der jeweiligen Site eingetragen wird. Dies passiert automatisch, wenn der Benutzer zum ersten Mal die entsprechende Site aufruft. Hat der Benutzer jedoch die Site noch nie aufgerufen, muss man sicherstellen, dass der Benutzer eingetragen ist

-          Um die Berechtigung für ein einzelnes Element in einer Liste oder Bibliothek verteilen zu können, muss zunächst die Vererbung unterbrochen werden. Dies erfolgt mit der Methode BreakRoleInheritance

Comments

Mit Spalten?

Hallo! Wo genau muss dieser Code eingefügt werden? und kann man so auch Berechtigungen für Spalten setzen? Viele Grüße! Claudia
at 30.06.2008 11:17

Mit Spalten?

Hallo,
zu 1.) bei dem Code handelt es sich um ein universelles Fragment, welches man an verschiedenen Stellen nutzen kann (z.B. Webpart, Eventhandler, Workflow).
Ich verwende ihn öfters mal in einem Workflow, um die Beerchtzigungen für die Benutzer in einem Workflowschritt anzpassen. Die SharePoint Standard Workflows sind ja nicht in der Lage ist, die Berechtigungen für einen Benutzer zu setzen. Z.B. hat ein Benutzer im Approval-Workflows nicht automatisch auch Zugriffsberechtigungen auf das Element, für welches man den Workflow startet. In Workflow, die ich selbst umsetze, ist dies aber öfters mal eine Anforderung. In diesem Fall kann man die Methode (natürlich noch auf die eigenen Bedürfnisse) angepasst, direkt im Workflow Code oder besser noch in der Business Logic unterbringen.
Ein weiterer Anwendungsfall wäre ein Event Handler, der die Berechtigungen auf ein Dokument auf nur lesend verändert, wenn der Status dieses Dokumentes auf Final wechselt.
 
zu 2.) SharePoint ist nicht in der Lage, Berechtigungen auf Spalteneben zu verwalten. Deshalb funktioniert dieser Code dort nicht. Die Frage ist an dieser Stelle, was wollen Sie tatsächlich mit den Spaltenberechtigungen erreichen. Handlet es sich tatsächlich um einen expliziten Zugriffschutz oder soll ein Benutzer die Spalte schlicht weg nicht sehen können. Beide Fälle könnte man mit Custom Field Types lösen. Letzeres könnte man auch mit angepassten Ansichten und ggf. etwas JavaScript oder angepassten Formularen (z.B. InfoPath) lösen.
Gruss
Reiner Ganser
Reiner Ganser at 30.06.2008 19:14

Add Comment

Items on this list require content approval. Your submission will not appear in public views until approved by someone with proper rights. More information on content approval.

Title


Name (required) *


Body (required) *

SPAM Filter *


Bitte geben Sie hier die Nummer 4532 ein. Dadurch kann ich leichter SPAM unterbinden.
Attachments