diff --git a/core/lib/Drupal/Core/Entity/EntityAccessController.php b/core/lib/Drupal/Core/Entity/EntityAccessController.php index a811110..ad1c8be 100644 --- a/core/lib/Drupal/Core/Entity/EntityAccessController.php +++ b/core/lib/Drupal/Core/Entity/EntityAccessController.php @@ -40,6 +40,13 @@ class EntityAccessController implements EntityAccessControllerInterface { protected $moduleHandler; /** + * The entity manager used to get the access plugin definition. + * + * @var \Drupal\Core\Entity\EntityManager + */ + protected $entityManager; + + /** * Constructs an access controller instance. * * @param string $entity_type @@ -50,6 +57,18 @@ public function __construct($entity_type) { } /** + * Returns the entity manager. + * + * @return \Drupal\Core\Entity\EntityManager + */ + protected function entityManager() { + if (!isset($this->entityManager)) { + $this->entityManager = \Drupal::entityManager(); + } + return $this->entityManager; + } + + /** * {@inheritdoc} */ public function access(EntityInterface $entity, $operation, $langcode = Language::LANGCODE_DEFAULT, AccountInterface $account = NULL) { @@ -127,7 +146,13 @@ protected function processAccessHookResults(array $access) { * could not be determined. */ protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) { - return NULL; + $entity_info = $this->entityManager()->getDefinition($entity->entityType()); + if (!empty($entity_info['access_permission'])) { + return $account->hasPermission($entity_info['access_permission']); + } + else { + return NULL; + } } /** @@ -243,7 +268,13 @@ public function createAccess($entity_bundle = NULL, AccountInterface $account = * could not be determined. */ protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return NULL; + $entity_info = $this->entityManager()->getDefinition($entity->entityType()); + if (!empty($entity_info['access_permission'])) { + return $account->hasPermission($entity_info['access_permission']); + } + else { + return NULL; + } } /** diff --git a/core/modules/action/lib/Drupal/action/ActionAccessController.php b/core/modules/action/lib/Drupal/action/ActionAccessController.php deleted file mode 100644 index d94edd3..0000000 --- a/core/modules/action/lib/Drupal/action/ActionAccessController.php +++ /dev/null @@ -1,24 +0,0 @@ -locked && user_access('administer languages'); + return !$entity->locked && parent::checkAccess($entity, $operation, $langcode, $account); break; } return FALSE; } - /** - * {@inheritdoc} - */ - protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return $account->hasPermission('administer languages'); - } - } diff --git a/core/modules/menu_link/lib/Drupal/menu_link/Entity/MenuLink.php b/core/modules/menu_link/lib/Drupal/menu_link/Entity/MenuLink.php index a238ad6..258edb2 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/Entity/MenuLink.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/Entity/MenuLink.php @@ -33,6 +33,7 @@ * "default" = "Drupal\menu_link\MenuLinkFormController" * } * }, + * access_permission = "administer menu", * static_cache = FALSE, * base_table = "menu_links", * uri_callback = "menu_link_uri", diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php index a1c2c69..85cc796 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php @@ -38,11 +38,4 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A return $access; } - /** - * {@inheritdoc} - */ - protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return $account->hasPermission('administer menu'); - } - } diff --git a/core/modules/system/lib/Drupal/system/Entity/Action.php b/core/modules/system/lib/Drupal/system/Entity/Action.php index ac68e3e..f1176f0 100644 --- a/core/modules/system/lib/Drupal/system/Entity/Action.php +++ b/core/modules/system/lib/Drupal/system/Entity/Action.php @@ -24,8 +24,9 @@ * module = "system", * controllers = { * "storage" = "Drupal\Core\Config\Entity\ConfigStorageController", - * "access" = "Drupal\action\ActionAccessController" + * "access" = "\Drupal\Core\Entity\EntityAccessController" * }, + * access_permission = "administer actions", * config_prefix = "system.action", * entity_keys = { * "id" = "id", diff --git a/core/modules/user/lib/Drupal/user/Entity/Role.php b/core/modules/user/lib/Drupal/user/Entity/Role.php index 0f8e90e..97269c9 100644 --- a/core/modules/user/lib/Drupal/user/Entity/Role.php +++ b/core/modules/user/lib/Drupal/user/Entity/Role.php @@ -27,6 +27,7 @@ * "delete" = "Drupal\user\Form\UserRoleDelete" * } * }, + * access_permission = "administer permission", * config_prefix = "user.role", * entity_keys = { * "id" = "id", diff --git a/core/modules/user/lib/Drupal/user/Entity/User.php b/core/modules/user/lib/Drupal/user/Entity/User.php index d8dc8e4..8bd7e3a 100644 --- a/core/modules/user/lib/Drupal/user/Entity/User.php +++ b/core/modules/user/lib/Drupal/user/Entity/User.php @@ -30,6 +30,7 @@ * }, * "translation" = "Drupal\user\ProfileTranslationController" * }, + * access_permission = "administer user", * base_table = "users", * uri_callback = "user_uri", * route_base_path = "admin/config/people/accounts", diff --git a/core/modules/user/lib/Drupal/user/RoleAccessController.php b/core/modules/user/lib/Drupal/user/RoleAccessController.php index e98c540..0ab9ad8 100644 --- a/core/modules/user/lib/Drupal/user/RoleAccessController.php +++ b/core/modules/user/lib/Drupal/user/RoleAccessController.php @@ -27,15 +27,8 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A } default: - return user_access('administer permissions', $account); + return parent::checkAccess($entity, $operation, $langcode, $account); } } - /** - * {@inheritdoc} - */ - protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return user_access('administer permissions', $account); - } - } diff --git a/core/modules/user/lib/Drupal/user/UserAccessController.php b/core/modules/user/lib/Drupal/user/UserAccessController.php index e6f6ed6..618dfe3 100644 --- a/core/modules/user/lib/Drupal/user/UserAccessController.php +++ b/core/modules/user/lib/Drupal/user/UserAccessController.php @@ -41,13 +41,6 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A } /** - * {@inheritdoc} - */ - protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return user_access('administer users', $account); - } - - /** * Check view access. * * See EntityAccessControllerInterface::view() for parameters. diff --git a/core/modules/views/lib/Drupal/views/Entity/View.php b/core/modules/views/lib/Drupal/views/Entity/View.php index a24e53e..2b20f09 100644 --- a/core/modules/views/lib/Drupal/views/Entity/View.php +++ b/core/modules/views/lib/Drupal/views/Entity/View.php @@ -25,6 +25,7 @@ * "storage" = "Drupal\views\ViewStorageController", * "access" = "Drupal\views\ViewAccessController" * }, + * access_permission = "administer views", * config_prefix = "views.view", * entity_keys = { * "id" = "id", diff --git a/core/modules/views/lib/Drupal/views/ViewAccessController.php b/core/modules/views/lib/Drupal/views/ViewAccessController.php index 80ad8a9..2831b37 100644 --- a/core/modules/views/lib/Drupal/views/ViewAccessController.php +++ b/core/modules/views/lib/Drupal/views/ViewAccessController.php @@ -21,14 +21,7 @@ class ViewAccessController extends EntityAccessController { * {@inheritdoc} */ public function access(EntityInterface $entity, $operation, $langcode = Language::LANGCODE_DEFAULT, AccountInterface $account = NULL) { - return $operation == 'view' || user_access('administer views', $account); - } - - /** - * {@inheritdoc} - */ - protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return user_access('administer views', $account); + return $operation == 'view' || parent::checkAccess($entity, $operation, $langcode, $account); } }