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.




Auf Änderungen von Bibliotheksberechtigungen reagieren

Geprüfte Antwort Dieser Beitrag hat 11 Antworten

Ohne Rang
54 Beiträge
DDG erstellt 29 Nov. 2012 14:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

Ich habe folgendes Problem:
Ich will verhindern, dass von Benutzern verschiedene Aktionen in den Bibliotheksberechtigungen durchgeführt werden, z. B. dass Benutzer die Berechtigungsvererbung aktivieren/deaktivieren oder dass bestimmte Rechte auf Bibliotheksebene entfernt werden.
Kann ich diesen Ansatz über ihnen Event Receiver umsetzen, bzw. über welchen?
Also somit bräuchte ich einen Event Receiver der auf Änderungen von den Benutzerrechten reagiert.
Viele Grüße,
Dennis

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Nov. 2012 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dafür gibt es keine Ereignisse. Aber warum nimmst Du den Benutzern nicht einfach die Rechte sowas zu machen?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
DDG Als Antwort am 29 Nov. 2012 15:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok schade. Ja das habe ich mir auch schon überlegt, dass ich die Berechtigungsstufe ändere und ihnen verbiete Berechtigungen zu verwalten aber die User müssen noch bestimmte Berechtigungen beibehalten. D. h. sie dürfen alle Rechte hinzufügen und löschen jedoch ihren eigenen Rechte dürfen sie nicht ändern, um den User davor zu schützen sich seine eigenen Rechte zu nehmen. Ich glaube so langsam das Problem ist unlösbar :-)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Nov. 2012 16:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist allerdings tatsählich unlösbar. Ich bin aber der Meinung, daß nur Benutzer Berechtigungen verwalten sollten, die auch wirklich wissen was sie tun.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
66 Beiträge
Sigi Weber Als Antwort am 29 Nov. 2012 17:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Tja, ohne grösseren Programmieraufwand geht da leider nichts und auch dann nur wenn bestimmte Voraussetzungen erfüllt sind. Die wichtigste Voraussetzung ist dass Änderungen an den Berechtigungen ausschliesslich über das Web GUI gemacht werden und z.B. nicht per SharePoint Designer oder PowerShell etc.

Sollen/dürfen die User also nur per Web GUI die Berechtigungen ändern, dann kannst du ein WebControl entwicklen und dieses per Feature auf den PlaceholderAdditionalPageHead registrieren.

Dieses Webcontrol checkt dann ob eine entsprechende SPSite/SPWeb/SPList mit einer bestimmten ASPX Page (eben jene mit den Berechtigungen) von einem bestimmten Benutzer bearbeitet wird.

Eine Möglichkeit wäre dann eine eigene ASPX Page zu bauen (kann ja auch eine Kopie der bestehenden Berechtigungsseite sein), das ist am einfachsten, und dort beim speichern entsprechende Prüfungen einbauen.

Den Weg per PlaceholderAdditionalPageHead hab ich mittlerweile in mehr als 200 Features eingebaut um die verschiedensten SharePoint Funktionen zu erweitern/umzubauen. Klappt wunderbar!

Cheers,

Sigi Weber

Ohne Rang
54 Beiträge
DDG Als Antwort am 3 Dez. 2012 09:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

erstmal danke für die schnellen Antworten.

@Sigi deine Antwort hört sich ja schon einmal interessant an. Gibt es dazu ein "How To" im Internet?

Viele Grüße,

Dennis

Ohne Rang
66 Beiträge
Sigi Weber Als Antwort am 3 Dez. 2012 12:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Eine komplette Anleitung ist mir auch noch nicht unter die Finger gekommen, sonst hätte ich sie hier gepostet ;-)

Eine Anleitung wie man mit diesem PlaceholderAdditionalPageHead arbeitet findest du hier (Warnung: ist in Englisch und teilweise von mir):

http://sharepoint.stackexchange.com/questions/28461/how-can-i-enable-javascript-on-every-page-at-a-site-level

Wen diese Hürde genommen ist braucht es "nur" noch ASP.NET und SharePoint Object Model Kenntnisse in der Programmiersprache deiner Wahl (ich bevorzuge C#). Damit kannst du dann eine Abfrage auf die ASP.NET Page Url und SPSite/SPWeb/SPList sowie SPCurrentUser etc. machen und entsprechend reagieren (z.B. ein "Zugriff verweigert" generieren oder auf eine andere Seite umleiten, etc.).

Solltest du noch Unterstützung brauchen kann ich mal in meinem Codearchiv wühlen ob ich noch ein wenig Beispielcode finde der zumindest die Grundfunktionen enthält. Ein fertiges Beispiel für deine Anforderung habe ich leider (im Moment) nicht in meinem Archiv...

Cheers,

Sigi Weber

Ohne Rang
54 Beiträge
DDG Als Antwort am 3 Dez. 2012 13:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok das mit dem PlaceholderAdditionalPageHead funktioniert soweit. Leider ist mir noch nicht ganz klar, wie ich auf das SP Objekt Modell zugreifen kann. Ich wäre dir dankbar wenn du mir hier vielleicht ein Beispiel hast und bei den C# Beispielen mit den Grundfunktionen wäre ich auch nicht abgeneigt :-).

Auf jeden Fall schon einmal danke für deine Infos und Hilfe, das hat mich echt weitergebracht. Können wir die Beispiele hier austauschen oder benötigst du meine E-Mail?

Ohne Rang
66 Beiträge
Sigi Weber Als Antwort am 3 Dez. 2012 14:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Beispielcode können wir hier problemlos austauschen, da ist meinerseits nichts geheimnisvolles drin. Allerdings muss ich erst mal heute Abend mein Archivdatenträger wieder auspacken und mich durch das Chaos durchwühlen bevor ich hier etwas posten kann, geht leider nicht früher sorry!

Auf das SP Objektmodell kommst du per"SPContext.Current", z.B.:

SPSite currentSite = SPContext.Current.Site;

SPWeb currentWeb = SPContext.Current.Web;

SPList currentList = SPContext.Current.List;

SPUser currentUser = currentWeb.CurrentUser;

Auf die aktuelle Url mit:

string currentUrl = Request.Url.ToString().ToLower();

Mehr hab ich jetzt aus dem Kopf nicht parat...

Cheers,

Sigi Weber

Ohne Rang
66 Beiträge
Sigi Weber Als Antwort am 3 Dez. 2012 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hab doch noch durch Zufall ein paar Schnipsel in einer Demo VM gefunden, allerdings ohne Gewähr dass es funktioniert. Jegliches Errorhandling mit try/catch fehlt auch noch, das ueberlasse ich dir ;-)

Trotzdem hier mal der Code, er blockiert den Zugriff auf die SharePoint Seite für die Listenberechtigungen einer bestimmten Liste wenn der angemeldete User nicht Mitglied einer bestimmten SharePoint Gruppe ist. Im Code gibts auch noch ein/zwei TODO's, da musst du dann nochmal ran und auf deine Bedürfnisse anpassen.

So, genug geplappert, hier der Code (leider kann ich scheinbar Code nicht entsprechend formatieren wenn ich hier poste, daher siehts etwas zerrupft aus):

 

<%@ Control Language="C#" compilationMode="Always" %>

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

 

<%@ Import Namespace="System.Web" %>

<%@ Import Namespace="System.Web.Configuration" %>

<%@ Import Namespace="System.Globalization" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="Microsoft.SharePoint" %>

<%@ Import Namespace="Microsoft.SharePoint.WebControls" %>

 

<%

string allowedSharePointGroup = "List Permission Admins"; // TODO: Replace hardcoded SharePoint group name

string errorMessage = "Access to this page has been denied. For more information, contact your system administrator.";

string listLink = "list={00bfea71-1e1d-4562-b56a-f05371bb0115}"; // TODO: Replace hardcoded SPList GUID

bool isMember = false;

 

// Only run code if *NOT* anonymous access happens

if (Request.IsAuthenticated)

{

// Get current page URL and querystring

string currentUrl = Request.Url.ToString().ToLower();

string queryString = HttpUtility.UrlDecode(Request.QueryString.ToString());

// Strip off parameter from current Url

if (currentUrl.IndexOf("?") != -1)

{

currentUrl = currentUrl.Substring(0,currentUrl.IndexOf("?"));

}

// Check if we are on the user.aspx page and the query string contains the SPList GUID as parameter

if (currentUrl.Contains("/_layouts/user.aspx") && queryString.Contains(listLink))

{

SPWeb currentWeb = SPContext.Current.Web;

SPUser currentUser = currentWeb.CurrentUser;

// Check if current user is member of a particular SharePoint group

isMember = currentWeb.IsCurrentUserMemberOfGroup(currentWeb.Groups[allowedSharePointGroup].ID);

 

// If current user is *NOT* member of a particular SharePoint group

if (!isMember)

{

// Deny access to page

Response.Clear();

Response.StatusCode = 403;

Response.Status = "403 - Forbidden";

Response.StatusDescription = "Access is denied";

 

// Optionally: Redirect to error page with custom error message

SPUtility.TransferToErrorPage(errorMessage);

}

}

}

%>

Cheers,

Sigi Weber

Ohne Rang
66 Beiträge
Sigi Weber Als Antwort am 3 Dez. 2012 16:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hab noch einen Link gefunden mit guten Infos zu PlaceHolderAdditionalPageHead:

http://sharepointmagazine.net/articles/custom-page-security-using-sharepoint-delegate-controls

Cheers,

Sigi Weber

Ohne Rang
54 Beiträge
DDG Als Antwort am 4 Dez. 2012 13:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

sorry dass ich erst jetzt antworte aber ich war gestern ziemlich beschäftigt und hab es nicht mehr geschafft rein zu schauen. Aber ich hab gleich heute deine neuen Infos weiter verarbeitet. Inzwischen läuft es auch und ich muss nur noch ein paar andere Funktionen umsetzten. Allerdings der letzte Link war sehr gut. Nochmals vielen vielen Dank, deine Hilfe hat mich echt richtig weitergebracht.