How to create custom permissions on Drupal?
We may need to create permissions that do not exist natively on Drupal or that are not precise enough. For example, Drupal will offer a permission that includes several features when we want to offer only one. The custom permissions module allows you to precisely manage permissions
Drupal Permissions
Drupal allows from the UI (i.e. the admin or the back office) to manage permissions by role. For example, you can assign a "content editor" role the right to delete content of a certain type, edit it, publish it, etc. The list of possibilities is very long and also depends on the modules you have installed. Installed custom modules add permissions (administer the module, etc.). For example, if you install the webform module, you will have access to a long list of permissions such as “administer the configuration”, “edit” or “delete” a form.
The ergonomics in the UI is not always excellent because it involves ticking checkboxes in a very (too?) long list of possibilities. But it is functional and it allows to correctly manage what users have the right to do.
We can sometimes meet a limit. A role will have a permission like manage site configuration. The user will have access to features that we do not want to grant him.
A module allows you to manage these permissions more precisely: Custom Permissions
With this module, you can add specific permissions from the road without giving access to a whole set of features.
Find the route of a feature
There are several solutions. you can find the route to a core feature in:
web/core/modules/system/system.routing.yml
For example for performance management:
system.performance_settings:
path: '/admin/config/development/performance'
defaults:
_form: '\Drupal\system\Form\PerformanceForm'
_title: 'Performance'
requirements:
_permission: 'administer site configuration'
The route is:
system.performance_settings
For contrib modules, routes can be found in the .routing.yml file, for example for 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'
The route is:
webform.config
Use the Devel module to find a route
With the Devel module, you can use the “routes info” menu which will list the available routes.
Install the "custom permissions" module
We install the module with composer:
composer require drupal/config_perms
How to create a custom permission
Go to People > Custom permissions
Click add permission. We indicate a name for the permission. You can indicate what you want, this name is made to name your permission. Then enter the route. Then you have to activate it.
We then find this new personalized permission in the list of permissions. It can therefore be attributed to a specific role.
Example
Go to /admin/people/custom-permissions/list
Click on “add permission”
A new line appears.
Give a name like “administer basic site settings”
Specify the system.site_information_settings route
Check the “enable” box and click save.
Custom rights management
then go to the rights management page: /admin/people/permissions
There is a section with “custom permissions”.
Add new comment