Mercurial > hg > isophonics-drupal-site
diff core/modules/user/src/UserAccessControlHandler.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 1fec387a4317 |
children | af1871eacc83 |
line wrap: on
line diff
--- a/core/modules/user/src/UserAccessControlHandler.php Tue Jul 10 15:07:59 2018 +0100 +++ b/core/modules/user/src/UserAccessControlHandler.php Thu Feb 28 13:21:36 2019 +0000 @@ -4,6 +4,7 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Access\AccessResultNeutral; +use Drupal\Core\Access\AccessResultReasonInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityAccessControlHandler; use Drupal\Core\Field\FieldDefinitionInterface; @@ -64,11 +65,16 @@ case 'update': // Users can always edit their own account. - return AccessResult::allowedIf($account->id() == $entity->id())->cachePerUser(); + $access_result = AccessResult::allowedIf($account->id() == $entity->id())->cachePerUser(); + if (!$access_result->isAllowed() && $access_result instanceof AccessResultReasonInterface) { + $access_result->setReason("Users can only update their own account, unless they have the 'administer users' permission."); + } + return $access_result; case 'delete': // Users with 'cancel account' permission can cancel their own account. - return AccessResult::allowedIf($account->id() == $entity->id() && $account->hasPermission('cancel account'))->cachePerPermissions()->cachePerUser(); + return AccessResult::allowedIfHasPermission($account, 'cancel account') + ->andIf(AccessResult::allowedIf($account->id() == $entity->id())->cachePerUser()); } // No opinion. @@ -106,7 +112,7 @@ return AccessResult::allowed()->cachePerPermissions()->cachePerUser(); } else { - return AccessResult::forbidden(); + return AccessResult::neutral(); } case 'preferred_langcode': @@ -116,7 +122,7 @@ // Allow view access to own mail address and other personalization // settings. if ($operation == 'view') { - return $is_own_account ? AccessResult::allowed()->cachePerUser() : AccessResult::forbidden(); + return $is_own_account ? AccessResult::allowed()->cachePerUser() : AccessResult::neutral(); } // Anyone that can edit the user can also edit this field. return AccessResult::allowed()->cachePerPermissions(); @@ -127,14 +133,14 @@ case 'created': // Allow viewing the created date, but not editing it. - return ($operation == 'view') ? AccessResult::allowed() : AccessResult::forbidden(); + return ($operation == 'view') ? AccessResult::allowed() : AccessResult::neutral(); case 'roles': case 'status': case 'access': case 'login': case 'init': - return AccessResult::forbidden(); + return AccessResult::neutral(); } return parent::checkFieldAccess($operation, $field_definition, $account, $items);