Hinzufügen von Elementen zu einer einer Ankündigungsliste für einen bestimmten Benutzer

StackOverflow https://stackoverflow.com/questions/624549

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe eine Kundenanfrage eine Reihe von Ankündigungen auf einige Daten aus einer anderen Datenbank basiert. Das meiste davon scheint einfach genug, aber die neuen Elemente sollten durch den Benutzer (Login) angegeben in den Eingangsdaten erstellt werden. Ich habe geplant, die Ansagen mit Hilfe der Liste Web-Dienste hinzufügen, aber ich würde sicher gerne mit Identitätswechsel, um zu vermeiden, dass der Benutzer direkt erstellen zu erhalten. Gibt es eine Möglichkeit, den richtigen Benutzer als Schöpfer zuweisen, ohne Identitätswechsel?

War es hilfreich?

Lösung

Das kann nicht die Antwort sein, die Sie suchen, aber Identitätswechsel ist ziemlich einfach, wenn Sie Code auf einem Sharepoint-Server in dem GAC ausgeführt haben. Sie brauchen kein Passwort kennen, die viele nicht erkennen, so werde ich auch weiterhin davon aus, dass dies der Grund, warum Sie nicht den Identitätswechsel zu tun haben wollten. Hier ist, wie es zu tun.

Sie können auf Sharepoint verbinden den typischen Konstruktor verwenden Sie für SPSite verwenden und die entsprechende SPUser Objekt finden. Sobald Sie das tun, können Sie die Usertoken Immobilie zu diesem SPUser bekommen. Dann müssen Sie den SPSite Konstruktor wieder verwenden, aber die Überlastung verwenden, die die SPUserToken zur Verfügung stellt. Dann alles, was Sie in Sharepoint tun wird über Identitätswechsel durchgeführt werden. Keine Notwendigkeit, mit erhöhten Rechten ausgeführt werden.

OK, jetzt, wo ich gesagt habe, es in Worten, ich werde versuchen, den Code zu erraten. Es sollte so etwas sein:

// Just determine the user token for a particular user
SPUserToken userToken = null;
using (SPSite tempSite = new SPSite("http://sharepointurl"))
{
    using (SPWeb tempWeb = tempSite.OpenWeb())
    {
        // I think this next line works, but I'm going from memory
        // I believe the user needs to have already logged into the site at least once
        SPUser user = tempWeb.AllUsers["username"];
        userToken = user.UserToken;
    }
}

// Now do whatever we want impersonating that user
using (SPSite site = new SPSite("http://sharepointurl", userToken))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do whatever you want here
    }
} 

Andere Tipps

Ich glaube nicht, dass es ein Verfahren ist, das zu archivieren.

Aber vielleicht könnte diese Abhilfe helfen. Ich muss zugeben, dass ich das nie getestet, es ist nur eine Idee, wie Sie Ihr Problem lösen könnte.

Sie können dies versuchen. Erstellen Sie die neue Ankündigung mit einem Admin-Benutzer oder mit RunWithElevatedPrivileges (). Danach den RunWithElevatedPrivileges () -Methode wieder und setzen Sie das Feld für den Benutzer „erstellt“, die der eigentliche Schöpfer der Ankündigung sein sollte. Auf diese Weise nur das Feld „geändert von“ sollte die „falschen“ Benutzer zeigen.

Ich weiß, dass dies nicht eine sehr elegante Lösung, aber es könnte funktionieren. ;)

Ich habe erkannt, dass das meine Forderung tatsächlich die Audit-Trail in Sharepoint zu umgehen war, so hoffe ich sicher, dass es nicht getan werden kann: -)

kam ich mit einer anderen Lösung: Ich habe auf die Ankündigung Liste einen neuen Benutzer oder Gruppenfeld und kopieren Sie die AD-Benutzeranmeldung in dieses Feld. Jeder Bericht oder Ansicht, die bisher verwendeten „erstellt von“ Feld soll jetzt das neue Feld verwendet werden.

Wie über die Situation, in der ein echter Benutzer dann ein neues Element in der Ankündigungsliste eintritt? Das wird nicht das neue Feld aktualisieren mit dem angemeldeten Benutzer!

Nun, die einzige Lösung, die ich mit oben kommen könnte, ist ein ListItem Trigger hinzufügen auf der Liste hinzuzufügen. Wenn ein neues Element hinzugefügt wird, überprüfe ich, ob das neue Feld einen Wert enthält, ist ich das neue Feld mit der ID des angemeldeten Benutzer nicht dann aktualisieren. Auf diese Weise das neue Feld immer einen gültigen Benutzer-ID enthalten.

Ich weiß, dass dies nicht eine elegante Lösung, aber zur Zeit ist es das Beste, was ich denken kann.

Wie in der Antwort der Code-Kommentare angedeutet, wenn der Benutzer der Site mindestens einmal nicht besucht hat, dann gibt es keine Benutzer-Metadaten zur Verfügung, von denen eine richtigen Usertoken abzuleiten.

Mit Sharepoint 2010 können Sie von der SPWeb Klasse eines Benutzer Besuch, mit der EnsureUser Methode simulieren verfügbar (das Snippet erstellt die Benutzer und auch zwickt sein Profil ein bisschen):

SPUser alice = web.EnsureUser(@"MYDOMAIN\alice");
SPList userInfo = web.SiteUserInfoList; //metadata storage of user info

SPListItem item = userInfo.GetItemById(alice.ID);
item["About Me"] = "I am Alice from Mel's Diner";
item.Update();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top