diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 14df557..d1290e3 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -246,7 +246,8 @@ function comment_menu() {
     'title' => 'Comment permalink',
     'page callback' => 'comment_permalink',
     'page arguments' => array(1),
-    'access arguments' => array('access comments'),
+    'access callback' => 'entity_page_access',
+    'access arguments' => array(1, 'view'),
   );
   $items['comment/%/view'] = array(
     'title' => 'View comment',
@@ -259,8 +260,8 @@ function comment_menu() {
     'title' => 'Edit',
     'page callback' => 'comment_edit_page',
     'page arguments' => array(1),
-    'access callback' => 'comment_access',
-    'access arguments' => array('edit', 1),
+    'access callback' => 'entity_page_access',
+    'access arguments' => array(1, 'update'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 0,
   );
@@ -268,7 +269,8 @@ function comment_menu() {
     'title' => 'Approve',
     'page callback' => 'comment_approve',
     'page arguments' => array(1),
-    'access arguments' => array('administer comments'),
+    'access callback' => 'entity_page_access',
+    'access arguments' => array(1, 'approve'),
     'file' => 'comment.pages.inc',
     'weight' => 1,
   );
@@ -276,7 +278,8 @@ function comment_menu() {
     'title' => 'Delete',
     'page callback' => 'comment_confirm_delete_page',
     'page arguments' => array(1),
-    'access arguments' => array('administer comments'),
+    'access callback' => 'entity_page_access',
+    'access arguments' => array(1, 'delete'),
     'type' => MENU_LOCAL_TASK,
     'file' => 'comment.admin.inc',
     'weight' => 2,
@@ -958,7 +961,7 @@ function comment_links(Comment $comment, Node $node) {
       }
     }
     elseif (user_access('post comments')) {
-      if (comment_access('edit', $comment)) {
+      if ($comment->access('update')) {
         $links['comment-edit'] = array(
           'title' => t('edit'),
           'href' => "comment/{$comment->id()}/edit",
@@ -1336,30 +1339,6 @@ function comment_user_predelete($account) {
 }
 
 /**
- * Determines whether the current user has access to a particular comment.
- *
- * Authenticated users can edit their comments as long they have not been
- * replied to. This prevents people from changing or revising their statements
- * based on the replies to their posts.
- *
- * @param $op
- *   The operation that is to be performed on the comment. Only 'edit' is
- *   recognized now.
- * @param Drupal\comment\Comment $comment
- *   The comment object.
- *
- * @return
- *   TRUE if the current user has acces to the comment, FALSE otherwise.
- */
-function comment_access($op, Comment $comment) {
-  global $user;
-
-  if ($op == 'edit') {
-    return ($user->uid && $user->uid == $comment->uid->target_id && $comment->status->value == COMMENT_PUBLISHED && user_access('edit own comments')) || user_access('administer comments');
-  }
-}
-
-/**
  * Accepts a submission of new or changed comment content.
  *
  * @param Drupal\comment\Comment $comment
diff --git a/core/modules/comment/lib/Drupal/comment/CommentAccessController.php b/core/modules/comment/lib/Drupal/comment/CommentAccessController.php
new file mode 100644
index 0000000..da957d2
--- /dev/null
+++ b/core/modules/comment/lib/Drupal/comment/CommentAccessController.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\comment\CommentAccessController
+ */
+
+namespace Drupal\comment;
+
+use Drupal\Core\Entity\EntityAccessController;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\user\Plugin\Core\Entity\User;
+
+/**
+ * Access controller for the comment entity.
+ *
+ * @see \Drupal\comment\Plugin\Core\Entity\Comment.
+ */
+class CommentAccessController extends EntityAccessController {
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityAccessController::viewAccess().
+   */
+  public function viewAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return user_access('access comments', $account);
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityAccessController::createAccess().
+   */
+  public function createAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return user_access('post comments', $account);
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityAccessController::updateAccess().
+   */
+  public function updateAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    // If no user is specified fill in the current one.
+    if (!isset($account)) {
+      $account = $GLOBALS['user'];
+    }
+    return ($account->uid && $account->id() == $entity->uid && $entity->status == COMMENT_PUBLISHED && user_access('edit own comments', $account)) || user_access('administer comments', $account);
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityAccessController::deleteAccess().
+   */
+  public function deleteAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return user_access('administer comments', $account);
+  }
+
+  /**
+   * Implements \Drupal\Core\Entity\EntityAccessController::approveAccess().
+   */
+  public function improveAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return user_access('administer comments', $account);
+  }
+
+}
diff --git a/core/modules/comment/lib/Drupal/comment/CommentTranslationController.php b/core/modules/comment/lib/Drupal/comment/CommentTranslationController.php
index 644694f..656af99 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentTranslationController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentTranslationController.php
@@ -17,23 +17,6 @@
 class CommentTranslationController extends EntityTranslationControllerNG {
 
   /**
-   * Overrides EntityTranslationController::getAccess().
-   */
-  public function getAccess(EntityInterface $entity, $op) {
-    switch ($op) {
-      case 'view':
-        return user_access('access comments');
-      case 'update':
-        return comment_access('edit', $entity);
-      case 'delete':
-        return user_access('administer comments');
-      case 'create':
-        return user_access('post comments');
-    }
-    return parent::getAccess($entity, $op);
-  }
-
-  /**
    * Overrides EntityTranslationController::entityFormTitle().
    */
   protected function entityFormTitle(EntityInterface $entity) {
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
index bccf85d..650d306 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
@@ -21,6 +21,7 @@
  *   bundle_label = @Translation("Content type"),
  *   module = "comment",
  *   controller_class = "Drupal\comment\CommentStorageController",
+ *   access_controller_class = "Drupal\comment\CommentAccessController",
  *   render_controller_class = "Drupal\comment\CommentRenderController",
  *   form_controller_class = {
  *     "default" = "Drupal\comment\CommentFormController"
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/field/LinkEdit.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/field/LinkEdit.php
index 4a17fe7..53c358a 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/field/LinkEdit.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/field/LinkEdit.php
@@ -44,7 +44,7 @@ function render_link($data, $values) {
     parent::render_link($data, $values);
     // ensure user has access to edit this comment.
     $comment = $this->get_value($values);
-    if (!comment_access('edit', $comment)) {
+    if (!$comment->access('update')) {
       return;
     }
 
