Ho eseguito la rappresentazione in SharePoint piuttosto un po 'in passato facendo qualcosa come la seguente.È possibile eseguire una ricerca rappresentata in SharePoint senza fornire una password?
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'
}
}
Si noti che questo non richiede la password dell'utente che si sta impersonando, ma richiede certa protezione dall'accesso di codice per l'esecuzione. Come nota a margine, la chiamata di ConfirmUser richiede anche che l'utente corrente sia un amministratore, ma esistono altri metodi che possono essere utilizzati al posto di CleanUser per ottenere l'oggetto SPUser (cercando di mantenere il mio frammento di codice semplice per questa domanda).
Ora che ho impostato il livello ... Ora desidero fare una FullTextSQLQuery o una KeywordQuery con il motore di query MOSS o WSS e ottenere risultati di sicurezza troncati in base a un utente rappresentato. Entrambi gli oggetti possono assumere un SPSite sul costruttore, ma ignorano la mia logica di rappresentazione. Vanno invece con l'utente attualmente connesso (HTTPContext.Current.User).
Ci sono anche altri costruttori: nome dell'applicazione (stringa) e per MOSS ce n'è uno con un ServerContext per il provider di servizi condivisi, ma non credo che ciò possa essere di aiuto.
Ho usato Reflector sulla classe KeywordQuery e la sua classe Query di base e diventa piuttosto brutto piuttosto veloce. Credo che la logica effettiva che determina l'utente sia in codice non gestito.
Quindi, è possibile per me farlo?
Link di lavoro: http://www.threewill.com/2010/06/connect-to-sharepoint-forwarding-user-identities/ – KjellSj