Eseguire il codice con elevati privilegi 2 (SharePoint)
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).
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.
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
//...
}
}