Adding user permissions¶
Overview¶
The Config Actions module allows you to alter existing configuration. We’re using it to add permissions to roles. We do so because the role needs to be provided by one feature (usually, drutopia_core
), while permissions need to be provided by various other features, such as a feature that provides a content type.
Technical details¶
It works on the basis of plugins, each of which applies a different sort of action. One of the plugins is add
, which will add to an existing configuration item.
The path
you specify answers the question “what specific parts of the configuration do you want to change?” In our case, the path is permissions
because that’s the part of the user role we want to change.
Want to know more about how Config Actions works? There is extensive documentation available.
How to add permissions¶
Configure your site and add the permission(s).
In the feature you’re working on, look for a directory called
config/actions
. If it does not already exist, create it.Edit the
composer.json
file and, if it doesn’t already exist, add the line"drupal/config_actions": "^1.0-beta1",
to therequire
section.Edit the
.info.yml
file and, if it isn’t already there, add- config_actions
to the dependencies section and ensure thatdrutopia_core
is also there as a dependency.For each role that you added a permission to:
Determine if there is already a file
config/actions/user.role.[role_name].yml
, where [role_name] is the machine name of the role. If not, create it, using the following for the file content:path: - permissions plugin: add actions:
On the site, use the admin UI to export the role you added the permission to. You do this by selecting “Configuration > Development > Synchronize configuration > Export > Single item” (admin/config/development/configuration/single/export). For “Configuration type”, select “Role” and then for “Configuration name” select the role you’re exporting. An export of the role will appear in the form. Here is an example:
uuid: 19da04f2-c4c7-4f34-b47e-f52e2bc315fc langcode: en status: true dependencies: { } id: manager label: Manager weight: 3 is_admin: null permissions: - 'access administration pages' - 'access toolbar' - 'administer thingumajigs'
Under
permissions
, you get the machine names of all permissions assigned to the role. Look for the ones you assigned (note: the machine names may differ from what you saw through the UI). For each permission you’re adding, add a line like the following to the user role file inconfig/actions
.'[permission name]': value: '[permission name]'
where [permission name] is the machine name of the permission. For example, your file might end up like this:
path: - permissions plugin: add actions: 'administer thingumajigs': value: 'administer thingumajigs'
Troubleshooting¶
If, after adding permissions with the config actions approach, you get the following cryptic message when doing a site install:
In ConfigEntityStorage.php line 252:
The entity does not have an ID.
It’s quite possible you forgot to add or enable a module that provides the role (or possibly other related configuration).