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