Skip to content
Snippets Groups Projects
Commit 806be299 authored by catch's avatar catch
Browse files

Issue #3319845 by alexpott, larowlan, catch:...

Issue #3319845 by alexpott, larowlan, catch: user_post_update_update_migrated_roles_followup() needs to be a hook_update_N

(cherry picked from commit 87932fe1)
parent a8995de4
No related branches found
No related tags found
17 merge requests!8506Draft: Issue #3456536 by ibrahim tameme,!5646Issue #3350972 by nod_: [random test failure]...,!5600Issue #3350972 by nod_: [random test failure]...,!5343Issue #3305066 by quietone, Rename RedirectLeadingSlashesSubscriber,!3603#ISSUE 3346218 Add a different message on edit comment,!3555Issue #2473873: Views entity operations lack cacheability support, resulting in incorrect dropbuttons,!3494Issue #3327018 by Spokje, longwave, xjm, mondrake: Update PHPStan to 1.9.3 and...,!3410Issue #3340128: UserLoginForm::submitForm has some dead code,!3389Issue #3325184 by Spokje, andypost, xjm, smustgrave: $this->configFactory is...,!3381Issue #3332363: Refactor Claro's menus-and-lists stylesheet,!3307Issue #3326193: CKEditor 5 can grow past the viewport when there is a lot of content,!3236Issue #3332419: Refactor Claro's messages stylesheet,!3231Draft: Issue #3049525 by longwave, fougere, larowlan, kim.pepper, AaronBauman, Wim...,!3212Issue #3294003: Refactor Claro's entity-meta stylesheet,!3194Issue #3330981: Fix PHPStan L1 error "Relying on entity queries to check access by default is deprecated...",!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!2972Issue #1845004: Replace custom password hashing library with PHP 5.5 password_hash()
......@@ -6,7 +6,7 @@
use Drupal\user\Entity\Role;
/**
* Tests user_post_update_update_roles_followup() upgrade path.
* Tests user_update_10000() upgrade path.
*
* @group Update
* @group legacy
......
......@@ -5,6 +5,8 @@
* Install, update and uninstall functions for the user module.
*/
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
/**
* Implements hook_schema().
*/
......@@ -97,3 +99,40 @@ function user_install() {
function user_update_last_removed() {
return 9301;
}
/**
* Remove non-existent permissions created by migrations.
*/
function user_update_10000() {
$cleaned_roles = [];
$existing_permissions = array_keys(\Drupal::service('user.permissions')
->getPermissions());
$config_factory = \Drupal::configFactory();
$role_ids = $config_factory->listAll('user.role.');
foreach ($role_ids as $role_id) {
$role_config = $config_factory->getEditable($role_id);
$removed_permissions = array_diff($role_config->get('permissions'), $existing_permissions);
if (!empty($removed_permissions)) {
$cleaned_roles[] = $role_config->get('label');
\Drupal::logger('update')->notice(
'The role %role has had the following non-existent permission(s) removed: %permissions.',
[
'%role' => $role_config->get('label'),
'%permissions' => implode(', ', $removed_permissions),
]
);
$permissions = array_intersect($role_config->get('permissions'), $existing_permissions);
$role_config->set('permissions', $permissions);
$role_config->save();
}
}
if (!empty($cleaned_roles)) {
return new PluralTranslatableMarkup(
count($cleaned_roles),
'The role %role_list has had non-existent permissions removed. Check the logs for details.',
'The roles %role_list have had non-existent permissions removed. Check the logs for details.',
['%role_list' => implode(', ', $cleaned_roles)]
);
}
}
......@@ -5,10 +5,6 @@
* Post update functions for User module.
*/
use Drupal\Core\Config\Entity\ConfigEntityUpdater;
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
use Drupal\user\Entity\Role;
/**
* Implements hook_removed_post_updates().
*/
......@@ -18,39 +14,3 @@ function user_removed_post_updates() {
'user_post_update_update_roles' => '10.0.0',
];
}
/**
* Remove non-existent permissions created by migrations.
*/
function user_post_update_update_migrated_roles_followup(&$sandbox = NULL) {
$cleaned_roles = [];
$existing_permissions = array_keys(\Drupal::service('user.permissions')
->getPermissions());
\Drupal::classResolver(ConfigEntityUpdater::class)
->update($sandbox, 'user_role', function (Role $role) use ($existing_permissions, &$cleaned_roles) {
$removed_permissions = array_diff($role->getPermissions(), $existing_permissions);
if (!empty($removed_permissions)) {
$cleaned_roles[] = $role->label();
\Drupal::logger('update')->notice(
'The role %role has had the following non-existent permission(s) removed: %permissions.',
[
'%role' => $role->label(),
'%permissions' => implode(', ', $removed_permissions),
]
);
$permissions = array_intersect($role->getPermissions(), $existing_permissions);
$role->set('permissions', $permissions);
return TRUE;
}
});
if (!empty($cleaned_roles)) {
return new PluralTranslatableMarkup(
count($cleaned_roles),
'The role %role_list has had non-existent permissions removed. Check the logs for details.',
'The roles %role_list have had non-existent permissions removed. Check the logs for details.',
['%role_list' => implode(', ', $cleaned_roles)]
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment