Aller au contenu principal
Menu
Offcanvas

Comment créer des permissions personnalisées sur Drupal ?

On peut avoir besoin de créer des permissions qui n'existent pas nativement sur Drupal ou qui ne sont pas assez précises. Par exemple, Drupal va proposer une permission qui englobe plusieurs fonctionnalités alors que l’on veut en proposer une seule. Le module custom permissions permet de gérer précisément les permissions.

Les permissions sur Drupal

Drupal permet depuis l’UI (c’est à dire l’admin ou le back office) de gérer les permissions par rôle. Par exemple, vous pouvez attribuer à un rôle "rédacteur de contenu" le droit de supprimer des contenus d’un certain type, de les modifier, de les publier, etc. La liste des possibilités est très longue et dépend aussi des modules  que vous avez installé. Les modules custom installés ajoutent des permissions (administrer le module, etc.). Par exemple, si vous installez le module webform, vous aurez accès à une longue liste de permissions tel que “administrer la configuration”, “éditer” ou “supprimer” un formulaire.

L'ergonomie dans l’UI n’est pas toujours excellente car il s’agit de cocher des checkbox dans une très (trop ?) longue liste de possibilités. Mais c’est fonctionnel et cela permet de gérer correctement ce que les utilisateurs ont le droit de faire.

On peut  parfois rencontrer une limite. Un rôle va avoir une permission comme gérer la configuration du site. L'utilisateur va avoir accès à des fonctionnalités que l’on ne souhaite pas lui accorder. 

Un module permet de gérer plus précisément ces permissions : Custom Permissions

Avec ce module, on peut ajouter des permissions précises à partir de la route sans donner accès à tout un ensemble de fonctionnalités.

Trouver la route d’une fonctionnalité

Il y a plusieurs solutions. vous pouvez trouver la route d’une fonctionnalité du core dans :

web/core/modules/system/system.routing.yml

Par exemple pour la gestion des performance :

system.performance_settings:
  path: '/admin/config/development/performance'
  defaults:
    _form: '\Drupal\system\Form\PerformanceForm'
    _title: 'Performance'
  requirements:
    _permission: 'administer site configuration'

La route est :

system.performance_settings

Pour les modules contrib, on peut trouver les routes dans le fichier .routing.yml, par exemple pour webform : 

webform..routing.yml
webform.config:
  path: '/admin/structure/webform/config'
  defaults:
    _form: '\Drupal\webform\Form\AdminConfig\WebformAdminConfigFormsForm'
    _title: 'Webforms: Forms configuration'
  requirements:
    _permission: 'administer webform'

La route est :

webform.config

Utiliser le module Devel pour trouver une route

Avec le module Devel, on peut utiliser le menu “routes info” qui va lister les routes disponibles.

Installer le module “custom permissions"

On installe le module avec composer :

composer require drupal/config_perms

Comment créer une permission personnalisée

Il faut aller dans People > Custom permissions

Cliquez sur ajouter une permission. On indique un nom pour la permission. Vous pouvez indiquer ce que vous voulez, ce nom est fait pour nommer votre permission. Indiquez ensuite la route. Ensuite, il faut l’activer.

On retrouve ensuite cette nouvelle permission personnalisée dans la liste des permissions. On peut donc l'attribuer à un rôle spécifique. 

Exemple 

Allez dans /admin/people/custom-permissions/list

Cliquer sur “add permission”

Une nouvelle ligne apparaît.

Donner un nom comme "administrer les paramètres de base du site”
Indiquer la route system.site_information_settings

cocher la case “activer” et cliquer sur enregistrer.

Screenshot of the page creating a custom permission
Capture écran page création d'un permission personnalisée

Gestion des droits personnalisés

aller ensuite sur la page de gestion des droits : /admin/people/permissions

On retrouve une section avec les “custom permissions”.

Activation des droits personnalisés
capture écran Activation des droits personnalisés

Ajouter un commentaire

Articles similaires

Comment supprimer les changements locaux avec git que l'on n'a pas commit ?

LIRE LA SUITE