2009-11-03 14 views
0

I`v développé webpart personnalisé. Je peux l'ajouter à la page et les propriétaires de sites peuvent voir la page sans problème. Toutefois, les visiteurs/utilisateurs du site sont redirigés vers la page d'erreur Accès refusé. Bien sûr, je dois faire certaines choses que les utilisateurs normaux ne sont pas autorisés à faire.Les membres du site/visiteurs obtiennent accès refusé page d'erreur en raison de webpart

Mais ce qui me dérange, c'est que lorsque je place un point d'arrêt dans un constructeur webpart ou même dans une déclaration de variable, il ne sera pas touché! (Si j'essaie d'afficher la page avec des privilèges limités). Mais dans mon navigateur, j'obtiens la page d'accès refusé. Cependant, si je ferme ce webpart, j'ai immédiatement accès à cette page et tout est OK.

Quelle est la prise ici? J'espérais pouvoir attraper l'exception avec le débogueur pour voir quelle déclaration est coupable, mais il semble que webpart n'exécute aucun code et que je reçois cette exception. Edit: Désolé, il s'avère que le débogueur atteint maintenant ces points d'arrêt. Je ne sais pas ce qui a changé, parce que les symboles ont été chargés.

Répondre

0

Trouvé la solution.

Il s'avère que j'ai cherché à déterminer si l'utilisateur appartient à un groupe spécifique en essayant d'accéder à ce groupe d'utilisateurs. Comme il était impossible si un utilisateur ne dispose pas d'une telle permissions, il était jeter une sorte d'exception interne avec le message

« Impossible d'évaluer l'expression parce que le code est optimisé ou un cadre natif est sur le dessus de la pile d'appel. "

Quoi qu'il en soit, je maintenant appris à boucle à travers SPUser.Groups (SPGroupCollection) et vérifier si nous avons un groupe correspondant plutôt que d'énumérer les chefs de groupe et de voir s'il est à l'intérieur.

2

Quel est le niveau de confiance sur votre site Sharepoint? Vous voudrez peut-être donner un accès temporaire à Fulltrust pour voir si vous avez des problèmes d'accès.

Si oui, vous avez peut-être un problème de sécurité d'accès au code (CAS) entre vos mains. Mon premier instinct est que votre assembly n'a pas les privilèges nécessaires pour fonctionner correctement pour les utilisateurs normaux. Vous pouvez le configurer à l'aide de l'entrée CAS personnalisée dans le fichier manifest.xml de la partie Web, par ex. Si vous appelez des ressources externes, vous devrez peut-être configurer System.New.WebPermission et définir l'URL à laquelle vous êtes autorisé à accéder. Vous pouvez trouver plus d'informations à ce sujet au U2U site.

Que fait aussi votre webpart? Si vous essayez d'accéder à des ressources auxquelles les utilisateurs normaux n'ont pas accès (par exemple une liste dans un site), vous devez utiliser la méthode SPSecurity.RunWithElevatedPrivilages, de sorte que vous ayez les privilèges nécessaires (attention à créer une nouvelle instance Site dans ce méthode pour que le contexte se remplisse correctement).

0

Vous devez donner la permission (mettre à jour votre webpart personnel) au groupe de visiteurs. Cependant, ce n'est pas recommandé. Si vous le souhaitez, vous pouvez créer un niveau d'autorisation distinct et l'associer au groupe de visiteurs.

À la vôtre !!