Fermer

octobre 30, 2020

Implémentation de restrictions d'édition au niveau du champ dans Episerver


Souvent, lors de la création de modèles de contenu dans un CMS, il est important de prendre en compte les différents types d'éditeurs et les autorisations qu'ils peuvent avoir au sein de l'écosystème. Une technique que je trouve très efficace consiste à limiter la quantité de champs qu'un utilisateur peut voir en fonction de son rôle CMS. La suppression des champs non essentiels de vos auteurs de contenu quotidiens conduit à la robustesse du système et à une plus grande adoptabilité. Dans de nombreux cas, ces champs doivent être verrouillés à des rôles de niveau administratif spéciaux. Voici comment vous pouvez le faire dans Episerver.

Définition de champs dans Episerver

Tout d'abord, définir un champ dans Episerver est assez simple. Pour ce faire, il vous suffit d'ajouter des propriétés à votre modèle correspondant. Par exemple, votre page d'accueil peut être définie comme ceci:

[ContentType (GUID = "49fda103-1b15-4d1c-81bd-32263cf0d46d")]
 public class HomePage: EPiServer.Core.PageData {
    [Display (Name = "Header Content Area")]
    Public Virtual ContentArea HeaderContentArea {get; ensemble; }

    [Display (Name = "Body Content Area")]
    ContentArea virtuel public BodyContentArea {get; ensemble; }

    [Display (Name = "Footer Content Area")]
    public virtuel ContentArea FooterContentArea {get; ensemble; }
} 

 SAS IDC Episerver Commerce Guide

Dans ce cas, j'ai défini un type de page avec 3 champs: zone de contenu d'en-tête, zone de contenu corps et zone de contenu pied de page. Je trouve utile de créer l'en-tête et le pied de page en tant que zones de contenu dédiées qui reçoivent des blocs spécialisés, mais nous en parlerons plus tard.

Restriction des champs dans Episerver

Maintenant, disons que nous voulons verrouiller notre contenu d'en-tête et de pied de page domaines à des rôles spécifiques. Cela peut facilement être fait en créant un attribut IMetadataAware .

 public class EditingRestrictionAttribute: Attribute, IMetadataAware
{
    public EditingRestrictionAttribute ()
    {
    }

    public void OnMetadataCreated (métadonnées ModelMetadata)
    {
        // interroge l'objet EPiServer.Security.PrincipalInfo pour déterminer si le
        // l'utilisateur actuel a accès pour modifier ce champ

        if (EPiServer.Security.PrincipalInfo.CurrentPrincipal.IsInRole ("CmsAdmins"))
        {
            revenir;
        }

        // si l'utilisateur a échoué à la vérification ci-dessus, définissez le champ sur lecture seule et masquez-le pour le mode d'édition
        metadata.IsReadOnly = true;
        metadata.ShowForEdit = false;
    }
} 

La partie intéressante à ce sujet est que vous pouvez créer des règles d'autorisation complexes. Vous pouvez interroger la page et vérifier son emplacement dans l'arborescence, vérifier son type, comparer avec l'utilisateur, etc. Une fois votre logique en place, vous pouvez simplement mettre à jour vos modèles pour utiliser votre nouvel attribut:

 [ContentType (GUID = "49fda103-1b15-4d1c-81bd-32263cf0d46d")]
public class HomePage: EPiServer.Core.PageData {
    [Display (Name = "Header Content Area")]
    [EditingRestriction]
     ContentArea virtuel public HeaderContentArea {get; ensemble; }

    [Display (Name = "Body Content Area")]
    ContentArea virtuel public BodyContentArea {get; ensemble; }

    [Display (Name = "Footer Content Area")]
    [EditingRestriction]
     ContentArea virtuel public FooterContentArea {get; ensemble; }
} 

J'espère que cela aidera!

À propos de l'auteur <! -: dmccurry, Architecte de solutions ->

Je suis un développeur Sitecore certifié, un singe de code et un nerd général. J'ai sauté dans l'espace .NET il y a 10 ans pour travailler sur des applications de classe entreprise et je n'ai jamais regardé en arrière. J'adore créer des choses, des Legos aux logiciels qui résolvent de vrais problèmes. Ai-je mentionné que j'aime les jeux vidéo?

Plus de cet auteur






Source link