Przykład:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSitesuperSite = new SPSite(SPContext.Current.Site.ID))
{
using (SPWebsuperWeb =
superSite.OpenWeb(SPContext.Current.Web.ID))
{
// Your code here
}
}
});
Podczas pobierania SuperSite lepiej jest jednak wykorzystać wrapper, w postaci klasy SPSecurityHelper, zademonstrowanej przez Dana Larsona na jego tech-blogu
Klasa SPSecurityHelper:
using Microsoft.SharePoint;Wykorzystanie klasy SPSecurityHelper:
/// <summary>A class for working with elevated privilege</summary>
public static class SPSecurityHelper
{
/// <summary>Returns an elevated site</summary>
/// <param name="theSite">
/// The site that you want an elevated instance of.
/// You must dispose of this object unless it is part of SPContext.Current.
/// </param>
/// <returns>An elevated site context.</returns>
/// <remarks>Be sure to dispose of objects created from this method.</remarks>
public static SPSite GetElevatedSite(SPSite theSite)
{
var sysToken = GetSystemToken(theSite);
return new SPSite(theSite.ID, sysToken);
}
/// <summary>Gets a UserToken for the system account.</summary>
/// <param name="site"></param>
/// <returns>A usertoken for the system account user./returns>
/// <remarks>Use this token to impersonate the system account</remarks>
public static SPUserToken GetSystemToken(SPSite site)
{
site.
CatchAccessDeniedException = false;
try
{
return site.SystemAccount.UserToken;
}
catch (UnauthorizedAccessException)
{
SPUserToken sysToken = null;
// Only use runwithelevated to grab the system user token.
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using (SPSite lolcatKiller = new SPSite(site.ID))
{
sysToken = lolcatKiller.SystemAccount.UserToken;
}
}
);
return sysToken;
}
}
}
using (SPSite superSite = SPSecurityHelper.GetElevatedSite(SPContext.Current.Site))
{
using (SPWeb superWeb = superSite.OpenWeb(SPContext.Current.Web.ID))
{
// Your code here
}
}
Sposób wykorzystania jest bardzo prosty, tzn. do klasy SPSecurityHelper przekazujemy obiekt zwykłego SpSite, natomiast z powrotem dostajemy obiekt tego samego SpSite z podwyższonymi uprawnieniami. Dzięki wykorzystaniu klasy SPSecurityHelper kod jest krótszy oraz lepszy jakościowo.
Brak komentarzy:
Prześlij komentarz