diff --git a/entityqueue.post_update.php b/entityqueue.post_update.php index 3c1144d..45cbb6d 100644 --- a/entityqueue.post_update.php +++ b/entityqueue.post_update.php @@ -5,8 +5,10 @@ * Post update functions for Entityqueue. */ +use Drupal\Core\Config\Entity\ConfigEntityUpdater; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\user\Entity\Role; /** * Update subqueues to be revisionable and translatable. @@ -112,3 +114,24 @@ function entityqueue_post_update_remove_reverse_in_admin_setting() { $queue_config->save(TRUE); } } + +/** + * Revoke stale Entityqueue permissions. + */ +function entityqueue_post_update_revoke_stale_permissions(&$sandbox = NULL) { + $permission_definitions = \Drupal::service('user.permissions')->getPermissions(); + \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'user_role', function (Role $role) use ($permission_definitions) { + $valid_permissions = array_intersect($role->getPermissions(), array_keys($permission_definitions)); + $invalid_permissions = array_diff($role->getPermissions(), $valid_permissions); + + $needs_update = FALSE; + foreach ($invalid_permissions as $invalid_permission) { + if (str_ends_with($invalid_permission, ' entityqueue')) { + $role->revokePermission($invalid_permission); + $needs_update = TRUE; + } + } + + return $needs_update; + }); +} diff --git a/src/EntityQueuePermissions.php b/src/EntityQueuePermissions.php index 3149f9c..27f7509 100644 --- a/src/EntityQueuePermissions.php +++ b/src/EntityQueuePermissions.php @@ -42,16 +42,19 @@ class EntityQueuePermissions { $permissions["create $queue_id entityqueue"] = [ 'title' => $this->t('Add %queue subqueues', ['%queue' => $queue->label()]), 'description' => $this->t('Access to create new subqueue to the %queue queue.', ['%queue' => $queue->label()]), + 'dependencies' => [$queue->getConfigDependencyKey() => [$queue->getConfigDependencyName()]], ]; $permissions["delete $queue_id entityqueue"] = [ 'title' => $this->t('Delete %queue subqueues', ['%queue' => $queue->label()]), 'description' => $this->t('Access to delete subqueues of the %queue queue.', ['%queue' => $queue->label()]), + 'dependencies' => [$queue->getConfigDependencyKey() => [$queue->getConfigDependencyName()]], ]; } $permissions["update $queue_id entityqueue"] = [ 'title' => $this->t('Manipulate %queue queue', ['%queue' => $queue->label()]), 'description' => $this->t('Access to update the %queue queue.', ['%queue' => $queue->label()]), + 'dependencies' => [$queue->getConfigDependencyKey() => [$queue->getConfigDependencyName()]], ]; return $permissions;