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.
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”.
Ajouter un commentaire