Connexion S'inscrire

Connectez-vous

Login *
Mot de passe *
Se souvenir de moi

Créer un compte

Les champs marqués d'un astérisque (*) sont requis.
Nom *
Login *
Mot de passe *
Vérification mot de passe *
Email *
Vérification email *
Captcha *

Création d'un composant Joomla (partie 25) ACL - Contrôle du niveau d'accès


Dans cette partie,  nous allons mettre en place le contrôle du niveau d'accès de notre composant. Cette partie se passera au côté administrateur donc dans le dossier administrator. Si vous êtes arrivés directement sur cette page, peut-être que vous aimeriez commencer par le début: Partie 1 | Partie 2 | Partie 3 | Partie 4 | Partie 5 | Partie 6 | Partie 7 | Partie 8 | Partie 9 | Partie 10 | Partie 11 | Partie 12 | Partie 13 | Partie 14 | Partie 15 | Partie 16 | Partie 17 | Partie 18 | Partie 19 | Partie 20 | Partie 21 | Partie 22 | Partie 23 | Partie 24

1 - Introduction

ACL, en anglais, Access Level control ou Contrôle du niveau d'accès en français, permet de mettre en place les droits d'accès pour les différents groupes d'utilisateurs. On peut utiliser l'ACL pour décider que certaines actions (Créer, Modifier, Supprimer...) sont autorisés que pour des utilisateurs d'un certain groupe (Super Utilisateur, Administrateur, Manager, Enregistrer...). L'ACL au côté client permet de contrôler l'accès aux différentes vues. Par exemple si vous voulez que ce soit uniquement des élèves et des enseignants qui regarde la page des cours ou que ce soit juste les clients qui regardent les vidéos...

Dans cette partie, nous allons mettre en place l'ACL de base tel qu'utiliser dans les extensions Joomla. Si je reçoit des messages des gens qui ont besoin d'utiliser l'ACL au côté client, je ferai un tutoriel dessus.

 

2 - Le fichier access.xml

Le fichier dans lequel les droits d'accès sont définis est nommé access.xml et se trouve dans le dossier du composant en administration (administrator/components/com_djguitariste). Donc rendons dans le dossier du composant en administration et si le fichier n'existe pas encore, créons le. Voici le contenu du fichier qui est à peu près ce qu'on retrouve dans tous les composants de base de Joomla.

<?xml version="1.0" encoding="utf-8"?>
<access component="com_djguitariste">
    <section name="component">
        <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
        <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
        <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
        <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
        <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
        <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
        <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" />
    </section>
    <section name="category">
        <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" />
        <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" />
        <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" />
        <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" />
        <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" />
    </section>
</access>

3 - Modification du fichier config.xml

Pour que les droits d'accès soit visible dans l'administration, nous devons rajouter un onglet (fieldset) dans le fichier config.xml

  <fieldset name="permissions"
     label="JCONFIG_PERMISSIONS_LABEL"
     description="JCONFIG_PERMISSIONS_DESC">
     
     <field name="rules"
            type="rules"
            label="JCONFIG_PERMISSIONS_LABEL"
            class="inputbox"
            validate="rules"
            filter="rules"
            component="com_djguitariste"
            section="component" />   
     
  </fieldset>

Le contenu du fichier config.xml devrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<config>
  <fieldset name="list"
            label="COM_DJGUITARISTE_LIST_LABEL"
            description="COM_DJGUITARISTE_LIST_DESC">
            
         
     <field name="oderby"
            type="list"
            default="rdate"
            label="COM_DJGUITARISTE_GUITARISTE_ORDER_LABEL"       
            description=" ">
       <option value="ordering">COM_DJGUITARISTE_ORDERING</option>
       <option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>       
       <option value="date">JGLOBAL_OLDEST_FIRST</option>       
       <option value="alpha">COM_DJGUITARISTE_NAME_ALPHABETICAL</option>       
       <option value="ralpha">COM_DJGUITARISTE_NAME_REVERSE_ALPHABETICAL</option>                     
     </field>
                   
  </fieldset>
  <fieldset name="displaying"
    label="COM_DJGUITARISTE_DISPLAYING_LABEL"
    description="COM_DJGUITARISTE_DISPLAYING_DESC">
    
    <field
      name="show_author"
      type="radio"
      label="COM_DJGUITARISTE_SHOW_AUTHOR_LABEL"
      description="COM_DJGUITARISTE_SHOW_AUTHOR_DESC"
      class="btn-group btn-group-yesno"
      default="1"
      >
      <option value="1">JSHOW</option>
      <option value="0">JHIDE</option>
    </field>
    
    <field
      name="show_created"
      type="radio"
      label="COM_DJGUITARISTE_SHOW_CREATED_LABEL"
      description="COM_DJGUITARISTE_SHOW_CREATED_DESC"
      class="btn-group btn-group-yesno"
      default="1"
      >
      <option value="1">JSHOW</option>
      <option value="0">JHIDE</option>
    </field>
    
    <field
      name="show_category"
      type="radio"
      label="COM_DJGUITARISTE_SHOW_CATEGORY_LABEL"
      description="COM_DJGUITARISTE_SHOW_CATEGORY_DESC"
      class="btn-group btn-group-yesno"
      default="1"
      >
      <option value="1">JSHOW</option>
      <option value="0">JHIDE</option>
    </field>  
    
  </fieldset>
  
  <fieldset name="permissions"
     label="JCONFIG_PERMISSIONS_LABEL"
     description="JCONFIG_PERMISSIONS_DESC">
     
     <field name="rules"
            type="rules"
            label="JCONFIG_PERMISSIONS_LABEL"
            class="inputbox"
            validate="rules"
            filter="rules"
            component="com_djguitariste"
            section="component" />   
     
  </fieldset>

</config>

À partir de maintenant, si vous allez sur la page de configuration du composant, un onglet nommé "Droits" devrait apparaître et cet onglet permet de modifier les droits d'accès.

 

Joomla charge automatiquement les valeurs par défaut pour les différents groupe d'utilisateurs. Pour modifier les droits d'accès par défaut, il faut être connecté avec un compte Super Utilisateur. Sinon le bouton "Paramètres" ne sera pas visible.

4 - Modification des contrôleurs 

Dans les fichiers de contrôleur guitariste.php et guitaristes.php, nous avons les méthodes allowEdit() et allowAdd() qui retournait toutes les deux la valeur true. Nous avons forcé ces méthodes de retourner true pour permettre aux actions de fonctionner sans vérifier les droits d'accès. Maintenant que nous avons mis l'ACL en place, nous allons effacer ces deux méthode dans ces deux fichiers et laisser Joomla gérer cela en tenant  compte des droits d'accès.

5 - Modification des fichiers view.html.php

Le fichiers view.html.php se trouvent dans les deux dossiers de vue guitariste et guitaristes, nous devons modifier les méthodes addToolBar() en vérifiant les droits d'accès de l'utilisateur sur chacun des boutons avant de l'ajouter à la barre d'outils.

views/guitaristes/view.html.php

protected function addToolbar(){
    JToolbarHelper::title(JText::_('COM_DJGUITARISTE_MANAGE_GUITARISTES'));
    
    $user = JFactory::getUser();
    if($user->authorise('core.create', 'com_djguitariste')){
      JToolbarHelper::addNew('guitariste.add');  
    }
    
    if($user->authorise('core.edit', 'com_djguitariste') || $user->authorise('core.edit.own', 'com_djguitariste')){
      JToolbarHelper::editList('guitariste.edit');
    }
    
    if($user->authorise('core.edit.state', 'com_djguitariste')){
      JToolbarHelper::publish('guitaristes.publish');
      JToolbarHelper::unpublish('guitaristes.unpublish');
      JToolbarHelper::checkin('guitaristes.checkin');
    }
    
    if($user->authorise('core.delete', 'com_djguitariste') || $user->authorise('core.delete.own', 'com_djguitariste')){
      JToolbarHelper::deleteList('', 'guitaristes.delete');
    }
    
    if($user->authorise('core.admin', 'com_djguitariste')){
      JToolbarHelper::preferences('com_djguitariste');
    }
    
    JToolbarHelper::divider();
    
    //Un lien externe pour la page d'aide
    $external_url = "http://docteurjoomla.com";
    JToolbarHelper::help('JHELP_COMPONENTS_DJGUITARISTE_GUITARISTES_EDIT', false, $external_url);
}

 

views/guitariste/view.html.php

protected function addToolbar(){
    //Nous désactivons le menu de Joomla lorsqu'on est en mode édition pour obliger 
    //L'utilisateur a utiliser nos bouton
    JFactory::getApplication()->input->set('hidemainmenu', true);
    
    $user = JFactory::getUser();
    
    $isNew = ($this->item->id == 0);
    
    //Le deuxième paramètre sera utiliser pour afficher une icône avant le titre
    //Un span aura la classe 'guitariste' et c'est en CSS qu'on peut afficher l'îcone
    JToolbarHelper::title(JText::_('COM_DJGUITARISTE_MANAGER_GUITARISTE'), 'guitariste');
    
    if($isNew){
      if($user->authorise('core.create', 'com_djguitariste')){
        JToolbarHelper::apply('guitariste.apply');
        JToolbarHelper::save('guitariste.save');
      }
    }else{
      if($user->authorise('core.edit', 'com_djguitariste')){
        JToolbarHelper::apply('guitariste.apply');
        JToolbarHelper::save('guitariste.save');
      }elseif($user->authorise('core.edit.own', 'com_djguitariste') && ($this->item->created_by == $user->id)){
        JToolbarHelper::apply('guitariste.apply');
        JToolbarHelper::save('guitariste.save');
      }
      
      if($user->authorise('core.create', 'com_djguitariste')){
        JToolbarHelper::save2copy('guitariste.save2copy');
      }   
    }
    
    JToolbarHelper::cancel('guitariste.cancel');
    
    //Mettre de l'espace (séparateur)
    JToolbarHelper::divider();
    
    //plus tard nous verons comment mettre un lien pour aller sur une page d'aide externe
    JToolbarHelper::help('JHELP_COMPONENTS_DJGUITARISTE_GUITARISTES_EDIT');
}

 

Voilà nous venons de finir cette partie. Si vous avez des questions, veuillez utiliser le formulaire de contact ou notre page Facebook.

Lire la suite...

 


  • Dernière modification le mercredi, 20 décembre 2017 15:40
  • 351
Docteur Joomla

Après plus de 10 ans d'expérience en Joomla, je lance ce Blog pour partager mes connaissances avec les autres développeurs Joomla.