SharePoint : un web part qui ne s'affiche qu'avec certaines permissions ?

July 15, 2010

Voici un petit peu de code qui vous aidera à créer un WebPart qui ne s’affiche que si on dispose de certaines autorisations.

L’exemple typique est l’ajout d’un menu gestionnaire qui affiche certaines opérations/liens.

Ici, je vous montre un webpart qui permet d’afficher un lien vers un tableau de bord (dashboard.aspx) seulement si l’utilisateur connecté dispose de l’autorisation demandée :

using System;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;

namespace MyWebPartProject
{
    public class DashBoardLinkWebPart: Microsoft.SharePoint.WebPartPages.WebPart
    {
        protected HyperLink m_dashBoardLink;

        [WebBrowsable(true)]
        [WebDescription("Indique les permissions nécessaires pour afficher ce web part")]
        [WebDisplayName("Permissions requises")]
        [Personalizable(PersonalizationScope.Shared)]
        public SPBasePermissions RequiredPermissions { get; set; }

        protected override void OnLoad(EventArgs e)
        {
            var web = SPContext.Current.Web;
            // On détermine ici si on affiche le webpart ou non.
            this.Hidden = !web.DoesUserHavePermissions(RequiredPermissions);
        }
        protected override void CreateChildControls()
        {
            this.Controls.Add(m_dashBoardLink = new HyperLink());

            m_dashBoardLink.Text = "Ouvrir le tableau de bord";
            m_dashBoardLink.NavigateUrl = SPContext.Current.Web.Url.TrimEnd('/') + "/dashboard.aspx";
        }
    }
}

L’astuce consiste à utiliser la propriété Hidden du WebPart plutôt que la propriété Visible. Si vous essayez de modifier cette dernière, vous aurez une erreur du genre :

The Visible property cannot be set on Web Part XXXX. It can only be set on a standalone Web Part

Après déploiement du webpart, vous pouvez le poser sur une page de composant WebPart classique. Dans les propriétés de ce WebPart, dans la catégorie Divers, la sélection de l’autorisation nécessaire s’affiche :

configuration du webpart

Il suffit alors de sélectionner la permission requise pour afficher le web part.

Ce code est simpliste et ne sert qu’à montrer le principe. En production, on créera le webpart avec des règles métiers qui déterminent l’affichage, ou alors avec un ToolPart plus ergonomique, etc.

A noter que le webpart ici ne sécurise en rien la cible du lien… il ne fait qu’afficher ou non un lien !