2009-11-05 8 views
0

J'essaie d'obtenir l'appartenance à un groupe dans WSS 3.0. Je le fais dans un bloc d'autorisations élevé. Voici le code:Accès refusé lors de la tentative de lecture d'informations sur les groupes SharePoint

 
SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    using (SPSite site = new SPSite(SPContext.Current.Site.ID)) 
    { 
     using (SPWeb rootWeb = site.RootWeb) 
     { 
     SPGroup gAdmins = rootWeb.SiteGroups["Admins"]; 
     } 
    } 
}); 

Je reçois l'écran SharePoint "Accès refusé" lorsque j'exécute ce code. Le groupe existe. L'identité du pool d'applications pour l'application Web est dans le rôle dbo dans la base de données de contenu. Le code fonctionne sur mon serveur de développement, mais pas sur un autre serveur, ce qui me porte à croire qu'il y a quelque chose de mal avec les permissions ou la configuration sur ce serveur, peut-être quelque chose dans dcomcnfg?

Voici quelques lignes du journal de SharePoint qui semblent être liés:

PermissionMask check failed. asking for 0x08000000, have 0x00000000  
Unknown SPRequest error occurred. More information: 0x80070005 
Access Denied for /Pages/UserAdmin.aspx. StackTrace: Microsoft.SharePoint.Utilities.SPUtility:Void HandleAccessDenied(System.Exception), Microsoft.SharePoint.SPGlobal:Void HandleUnauthorizedAccessException(System.UnauthorizedAccessException), ....

[accueille UserAdmin.aspx ma part Web personnalisée contenant le code]

Répondre

0

On dirait que ce qui se passait parce que Je courais dans des privilèges élevés. Ceci est un site FBA non-étendu, ce qui signifie que les comptes de domaine n'y ont pas accès et ne peuvent pas y accéder. Lorsque vous exécutez des privilèges élevés, vous exécutez l'identité du pool d'applications, qui est généralement un compte de domaine. WSS renvoie ensuite une erreur car vous avez soudainement passé d'un utilisateur FBA à un utilisateur de domaine qui n'a pas accès au site.

Si vous étendez le site pour utiliser l'authentification Windows en plus de FBA, vous pouvez accorder l'accès au site à l'utilisateur du domaine et cela devrait fonctionner.

1

Le problème dans cette ligne de votre code « site SPSite = new SPSite (SPContext.Current.Site.ID) » Obtenez le Site.ID en dehors du périmètre de RWEP puis créer l'objet SPSite en passant cet ID. Le problème est dû au fait que SPContext.Current est pour l'utilisateur réel et si vous essayez d'y accéder sous RWEP, cela peut vous donner des problèmes ou des erreurs inattendues.