Ich habe den Identitätswechsel in SharePoint in der Vergangenheit ziemlich durchgeführt, indem ich etwas wie das Folgende gemacht habe.Können Sie eine imitierte Suche in SharePoint durchführen, ohne ein Passwort anzugeben?
SPWeb web = SPContext.Current.Web;
string currentWebUrl = web.Url;
SPUser user = web.EnsureUser(loginToImpersonate);
using (SPSite site = new SPSite(currentWebUrl, user.UserToken)
{
using (SPWeb impersonatedWeb = site.OpenWeb())
{
// Any SharePoint access here to 'impersonatedWeb'
// is impersonated as 'loginToImpersonate'
}
}
Beachten Sie, dass dies nicht das Kennwort des Benutzers erfordert Sie Identitätswechsel, aber bestimmte Codezugriffssicherheit zu laufen erfordert. Als Nebenbemerkung erfordert der Aufruf von EnsureUser auch, dass der aktuelle Benutzer ein Administrator ist, aber es gibt andere Methoden, die anstelle von EnsureUser verwendet werden können, um das SPUser-Objekt abzurufen (versuche, mein Codefragment für diese Frage einfach zu halten).
Nun, da ich die Bühne eingerichtet habe ... Ich möchte jetzt entweder eine FullTextSQLQuery oder eine KeywordQuery entweder für die MOSS oder WSS-Abfrage-Engine tun und Sicherheits abgeschnittene Ergebnisse basierend auf einem imitierte Benutzer erhalten. Beide Objekte können eine SPSite für den Konstruktor übernehmen, ignorieren jedoch meine Identitätswechsellogik. Sie gehen stattdessen mit dem aktuell angemeldeten Benutzer (HTTPContext.Current.User).
Es gibt auch andere Konstruktoren: Anwendungsname (String) und für MOSS gibt es einen mit einem ServerContext zum SSP, aber ich denke nicht, dass diese überhaupt helfen werden.
Ich habe Reflector für die KeywordQuery-Klasse und ihre Basis-Query-Klasse verwendet und es wird ziemlich schnell ziemlich hässlich. Ich glaube, dass die tatsächliche Logik, die den Benutzer bestimmt, in nicht verwaltetem Code enthalten ist.
Also, ist es mir möglich, dies zu tun?
Arbeitslink: http://www.threewill.com/2010/06/connect-to-sharepoint-forwarding-user-identities/ – KjellSj