Freitag, 29. August 2008

Berechtigungen für Quicklaunch-Elemente in der Navigation programmatisch vergeben

In unserem aktuellen Projekt ist es u.a. eine Anforderung, dass ein Element der Quicklaunchnavigation nur für bestimmte Benutzergruppen sichtbar ist.

Über die Oberfläche ist dies mit wenigen Klicks durchführbar:



Da die Gruppen, die hier berechtigt werden sollen, allerdings erst beim Erstellen eines neuen Subwebs via FeatureReceiver angelegt werden, muss die Berechtigung des Quicklaunches ebenfalls programmatisch erfolgen:


SPNavigationNodeCollection quickLaunch = web.Navigation.QuickLaunch.Navigation.QuickLaunch;

...

// new link: "Offene Aufgaben"
sb = new StringBuilder(Settings.openTasksUrl);
SPNavigationNode openTasksNode = new SPNavigationNode(Settings.openTasksTitle, sb.ToString());
quickLaunch.AddAsFirst(openTasksNode);
openTasksNode.Update();

openTasksNode = quickLaunch[0];

// set audience only to special groups
if (openTasksNode.Properties.ContainsKey("Audience"))
{
openTasksNode.Properties.Remove("Audience");
}

openTasksNode.Properties.Add("Audience", ";;;;" + Settings.groupNameTechnicansTitle + "," + Settings.groupNameCommercialsTitle + "," + Settings.groupNameBusinessManagerTitle);
openTasksNode.Update();

Im ersten Teil wird ein neues Objekt vom Typ SPNavigationNode erzeugt und der vorhandenen SPNavigationNodeCollection quickLaunch hinzugefügt. Diese kann einfach aus dem aktuellen web gezogen werden.

Da das SDK sich leider etwas ausschweigt was mögliche Properties eines SPNavigationNode-Objektes angeht, war etwas Recherchearbeit nötig und letztenendes das Debuggen und Abfragen eines vorhandenen SPNavigationNode-Objektes (mit über die Oberfläche gesetzten Gruppenberechtigungen) im Visual Studio-Debugger. In den Properties gab es unter anderem den Key "Audience" und seinen Value ";;;;Techniker,Kaufleute,Business Manager".

Das war also das Format, indem die Gruppen dem SPNavigationNode zugewiesen sein müssen.
Das Property wird für das SPNavigationNode-Objekt also gesetzt und dieses dann noch einmal geupdated.

Wichtig hierbei ist, dass die Gruppen irgendwie eindeutig benannt sind. SharePoint sucht nicht nur im Namen einer Gruppe sondern auch in deren Beschreibung. Gibt es mehrere Gruppen in denen z.B. in der Beschreibung "Kaufleute" auftaucht (z.B. "Benutzergruppe Kaufleute" und "Benutzergruppe Logistik Kaufleute"), kann SharePoint dies nicht mehr eindeutig zuordnen und im Zielgruppen-Editor wird derjenige Gruppeneintrag unterkringelt.

Keine Kommentare: