Je me demande pourquoi les deux méthodes énumérées ci-dessous ne donnent pas les mêmes résultats en matière de sécurité.
Résultat escompté : Les deux méthodes donnent un accès complet à tout le contenu de la base de données. collection actuelle du site
Résultat réel : L'élagage de sécurité se produit lors de l'utilisation de la méthode n°1
-
La méthode n° 2 fonctionne correctement pour récupérer le contenu d'autres sites Web, mais pas la méthode n° 1.
-
Les deux méthodes permettent d'accéder à travers les réseaux en Anonyme et les deux fonctionnent pour administrateur du site comptes.
-
La différence vient pour Responsables de la hiérarchie , Approbateurs y Rédacteurs en chef . La méthode n°1 ne donne pas d'accès administrateur à travers les sites web.
Méthode n° 1
using (SystemOperation op = new SystemOperation())
{
//Do an operation that requires retrieving across webs
}
public class SystemOperation : IDisposable
{
private WindowsImpersonationContext ctx;
public SystemOperation()
{
if (!WindowsIdentity.GetCurrent().IsSystem)
{
ctx = WindowsIdentity.Impersonate(System.IntPtr.Zero);
}
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool all)
{
if (ctx != null)
{
ctx.Undo();
}
}
}
Méthode n°2 :
Microsoft.Sharepoint.SPSecurity.RunWithElevatedPrivileges(delegate()
{
//Do an operation that requires retrieving across webs
});