From 723e5ea563b940f684b48a2f16f2f2c6d66d8440 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Sat, 25 Jan 2014 20:38:13 +0100
Subject: [PATCH] Issue #2172973 by tim.plunkett: Ensure ConfigEntities
 providing a list controller use admin_permission.

---
 .../Drupal/block/BlockAccessController.php    |  2 +-
 .../block/lib/Drupal/block/Entity/Block.php   |  1 +
 .../contact/CategoryAccessController.php      |  5 ++---
 .../lib/Drupal/contact/Entity/Category.php    |  1 +
 .../lib/Drupal/filter/Entity/FilterFormat.php |  1 +
 .../filter/FilterFormatAccessController.php   |  9 +--------
 .../system/DateFormatAccessController.php     |  5 +++--
 .../lib/Drupal/system/Entity/DateFormat.php   |  1 +
 .../system/lib/Drupal/system/Entity/Menu.php  |  1 +
 .../Drupal/system/MenuAccessController.php    | 19 ++++---------------
 10 files changed, 16 insertions(+), 29 deletions(-)

diff --git a/core/modules/block/lib/Drupal/block/BlockAccessController.php b/core/modules/block/lib/Drupal/block/BlockAccessController.php
index 315e4f6ec97f..6e2c1a512d55 100644
--- a/core/modules/block/lib/Drupal/block/BlockAccessController.php
+++ b/core/modules/block/lib/Drupal/block/BlockAccessController.php
@@ -56,7 +56,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
    */
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation != 'view') {
-      return $account->hasPermission('administer blocks');
+      return parent::checkAccess($entity, $operation, $langcode, $account);
     }
 
     // Deny access to disabled blocks.
diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php
index 926ef07bc92d..fe82d446d378 100644
--- a/core/modules/block/lib/Drupal/block/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Entity/Block.php
@@ -29,6 +29,7 @@
  *     }
  *   },
  *   config_prefix = "block.block",
+ *   admin_permission = "administer blocks",
  *   fieldable = FALSE,
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/contact/lib/Drupal/contact/CategoryAccessController.php b/core/modules/contact/lib/Drupal/contact/CategoryAccessController.php
index 59ee2c7f0cbe..f798d7980f3d 100644
--- a/core/modules/contact/lib/Drupal/contact/CategoryAccessController.php
+++ b/core/modules/contact/lib/Drupal/contact/CategoryAccessController.php
@@ -31,9 +31,8 @@ public function checkAccess(EntityInterface $entity, $operation, $langcode, Acco
       // the personal contact form.
       return $account->hasPermission('administer contact forms') && $entity->id() !== 'personal';
     }
-    else {
-      return $account->hasPermission('administer contact forms');
-    }
+
+    return parent::checkAccess($entity, $operation, $langcode, $account);
   }
 
 }
diff --git a/core/modules/contact/lib/Drupal/contact/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
index 2c2166acab59..86fa0f1fb3e7 100644
--- a/core/modules/contact/lib/Drupal/contact/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
@@ -28,6 +28,7 @@
  *     }
  *   },
  *   config_prefix = "contact.category",
+ *   admin_permission = "administer contact forms",
  *   bundle_of = "contact_message",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
index fa0d2cc67091..0bb5dec875e1 100644
--- a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
@@ -30,6 +30,7 @@
  *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
  *   },
  *   config_prefix = "filter.format",
+ *   admin_permission = "administer filters",
  *   entity_keys = {
  *     "id" = "format",
  *     "label" = "name",
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php
index a1edbd963e2d..9d3207d0a3f8 100644
--- a/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php
+++ b/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php
@@ -31,7 +31,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
       return FALSE;
     }
 
-    if ($operation != 'view' && $account->hasPermission('administer filters')) {
+    if ($operation != 'view' && parent::checkAccess($entity, $operation, $langcode, $account)) {
       return TRUE;
     }
 
@@ -41,11 +41,4 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     return !empty($permission) && $account->hasPermission($permission);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
-    return $account->hasPermission('administer filters');
-  }
-
 }
diff --git a/core/modules/system/lib/Drupal/system/DateFormatAccessController.php b/core/modules/system/lib/Drupal/system/DateFormatAccessController.php
index 9608271fc838..a5483b627df8 100644
--- a/core/modules/system/lib/Drupal/system/DateFormatAccessController.php
+++ b/core/modules/system/lib/Drupal/system/DateFormatAccessController.php
@@ -25,10 +25,11 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
       return TRUE;
     }
     // Locked date formats cannot be updated or deleted.
-    if (in_array($operation, array('update', 'delete')) && $entity->isLocked()) {
+    elseif (in_array($operation, array('update', 'delete')) && $entity->isLocked()) {
       return FALSE;
     }
-    return user_access('administer site configuration', $account);
+
+    return parent::checkAccess($entity, $operation, $langcode, $account);
   }
 
 }
diff --git a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
index 5b052523c63d..35ad4ab72303 100644
--- a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
+++ b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
@@ -34,6 +34,7 @@
  *     "label" = "label",
  *     "uuid" = "uuid"
  *   },
+ *   admin_permission = "administer site configuration",
  *   links = {
  *     "edit-form" = "system.date_format_edit"
  *   }
diff --git a/core/modules/system/lib/Drupal/system/Entity/Menu.php b/core/modules/system/lib/Drupal/system/Entity/Menu.php
index fa5d7fda54d7..fb09c0464e4b 100644
--- a/core/modules/system/lib/Drupal/system/Entity/Menu.php
+++ b/core/modules/system/lib/Drupal/system/Entity/Menu.php
@@ -21,6 +21,7 @@
  *     "access" = "Drupal\system\MenuAccessController"
  *   },
  *   config_prefix = "system.menu",
+ *   admin_permission = "administer menu",
  *   entity_keys = {
  *     "id" = "id",
  *     "label" = "label",
diff --git a/core/modules/system/lib/Drupal/system/MenuAccessController.php b/core/modules/system/lib/Drupal/system/MenuAccessController.php
index b6e7f7adc549..fe8436878c38 100644
--- a/core/modules/system/lib/Drupal/system/MenuAccessController.php
+++ b/core/modules/system/lib/Drupal/system/MenuAccessController.php
@@ -23,23 +23,12 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     if ($operation === 'view') {
       return TRUE;
     }
-    elseif ($operation == 'delete') {
-      // Locked menus could not be deleted.
-      if ($entity->isLocked()) {
-        return FALSE;
-      }
+    // Locked menus could not be deleted.
+    elseif ($operation == 'delete' && $entity->isLocked()) {
+      return FALSE;
     }
 
-    if (in_array($operation, array('update', 'delete'))) {
-      return $account->hasPermission('administer menu');
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
-    return $account->hasPermission('administer menu');
+    return parent::checkAccess($entity, $operation, $langcode, $account);
   }
 
 }
-- 
GitLab