lightning_core-8.x-5.3/modules/lightning_roles/lightning_roles.module
modules/lightning_roles/lightning_roles.module
<?php
/**
* @file
* Contains hook implementations for Lightning Roles.
*/
use Drupal\node\NodeTypeInterface;
use Drupal\user\Entity\Role;
/**
* Implements hook_ENTITY_TYPE_insert().
*/
function lightning_roles_node_type_insert(NodeTypeInterface $node_type) {
// Don't do anything during config sync.
if (\Drupal::isConfigSyncing()) {
return;
}
$config = \Drupal::config('lightning_roles.settings')->get('content_roles');
if (empty($config)) {
return;
}
$permission_map = function ($permission) use ($node_type) {
return str_replace('?', $node_type->id(), $permission);
};
$storage = Drupal::entityTypeManager()->getStorage('user_role');
foreach ($config as $key => $info) {
if (empty($info['enabled'])) {
continue;
}
$role_id = $node_type->id() . '_' . $key;
$role = $storage->load($role_id) ?: $storage->create([
'id' => $role_id,
'label' => str_replace('?', $node_type->label(), $info['label']),
'is_admin' => FALSE,
]);
// Only grant permissions the role does not already have.
$permissions = array_diff(
array_map($permission_map, $info['permissions']),
$role->getPermissions()
);
// Only grant permissions that actually exist.
$all_permissions = Drupal::service('user.permissions')->getPermissions();
$permissions = array_intersect($permissions, array_keys($all_permissions));
array_walk($permissions, [$role, 'grantPermission']);
$role->save();
}
}
/**
* Implements hook_ENTITY_TYPE_delete().
*/
function lightning_roles_node_type_delete(NodeTypeInterface $node_type) {
// Don't do anything during config sync.
if (\Drupal::isConfigSyncing()) {
return;
}
$config = \Drupal::config('lightning_roles.settings')->get('content_roles');
$storage = Drupal::entityTypeManager()->getStorage('user_role');
foreach (array_keys($config) as $key) {
$role = $storage->load($node_type->id() . '_' . $key);
if ($role) {
$role->delete();
}
}
}
