Ecco un altro sistema per accedere agli oggetti di SharePoint 2007 (WSS3 - MOSS) con un utente diverso da quello corrente. Viene usato tipicamente per accedere agli oggetti con i privilegi dell'account di sistema di sharepoint (SHAREPOINT\system).

Questo metodo è da preferire a quello che usa solo SPSecurity.RunWithElevatedPrivileges quando non si ha la necessità di accedere alle risorse di rete (ovvero di impersonare l'utente con cui gira l'application pool di SharePoint per accedere a risorse esterne).

In questo caso faccio l'impersonate tramite il token dell'utente di sistema (site.SystemAccount.UserToken).
C#
//string urlContext = "http://sharepoint2007.sgart.local/sites/newSiteCollection1";

string urlContext = SPContext.Current.Web.Url;

SPUserToken userToken = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //elevate privilege only for get user token
    using (SPSite site = new SPSite(urlContext))
    {
        //get token of user to use with object
        userToken = site.SystemAccount.UserToken;
    }
});

using (SPSite site = new SPSite(urlContext, userToken))
{
    using (SPWeb web = site.OpenWeb())
    {
        //web open with userToken credential
        //put here your code 
        //...
    }
}
Con lo stesso codice, cambiando il token, posso impersonare qualsiasi utente ad esempio per fare delle routine che verificano a quali risorse un determinato utente può accedere.
Potrebbe interessarti anche: