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).
//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.