2009-02-19 5 views
1

Je me demande pourquoi les deux méthodes énumérées ci-dessous ne donnent pas le même découpage de sécurité.Méthodes d'exécution avec des privilèges élevés dans un site de publication MOSS

Résultat attendu: Les deux méthodes donnent un accès complet à tous les contenus de la collection

Résultat réel du site actuel : parage de sécurité se produit lors de l'utilisation Méthode n ° 1

  • La méthode n ° 2 fonctionne correctement pour récupérer du contenu à partir d'autres sites Web, mais la méthode n ° 1 ne fonctionne pas.

  • Les deux méthodes donnent accès à travers les bandes en mode anonyme, et travaillent tous deux pour le site comptes admin.

  • La différence vient pour gestionnaires Hiérarchie, approbateurs et éditeurs. La méthode n ° 1 ne donne pas d'accès administrateur sur 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 
    }); 
+0

Quelle est la question? – Tundey

+0

Désolé je n'ai pas de réponse à votre question, mais je suis curieux de savoir pourquoi vous utiliseriez la méthode 1? Aussi le formatage de code semble avoir foiré dans votre question. –

+0

La raison pour laquelle vous auriez besoin de # 1 est que RunWithElevatedPrivileges ne fonctionne pas dans toutes les instances, comme l'accès au gestionnaire de profils. – webwires

Répondre

1

RunWithElevatedPrivileges fournit deux privledges séparés. Tout d'abord, il élève l'identité Windows de l'utilisateur vers le compte AppPool, la seconde est qu'il élève également l'identité vers le compte SharePoint \ System, qui est un compte de sécurité intégré offrant un contrôle total (au sens SharePoint). Le compte SharePoint interne est utilisé lorsque vous construisez vos objets SP (comme SPSite). Donc, en gros, cela dépend de la façon dont vous construisez votre code et quand vous installez vos objets qui affectent la façon dont les privilèges évoluent.

Questions connexes