content_entity_base-8.x-1.x-dev/src/Entity/Access/EntityBaseAccessControlHandler.php

src/Entity/Access/EntityBaseAccessControlHandler.php
<?php

namespace Drupal\content_entity_base\Entity\Access;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;

/**
 * Defines the access control handler for a custom entity type.
 */
class EntityBaseAccessControlHandler extends EntityAccessControlHandler {

  /**
   * {@inheritdoc}
   */
  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
    $access = parent::checkAccess($entity, $operation, $account);

    // List is here for revision access. You cannot have a "list" all entities
    // _entity_access check because _entity_access requires a single entity.
    if (in_array($operation, ['view', 'list'])) {
      $access = $access
        ->orIf(AccessResult::allowedIfHasPermission($account, 'access ' . $entity->getEntityTypeId()))
        ->orIf(AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getEntityTypeId()));
    }
    return $access;
  }

  /**
   * {@inheritdoc}
   */
  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
    $allowed_permissions = [];
    if ($admin_permission = $this->entityType->getAdminPermission()) {
      $allowed_permissions[] = $admin_permission;
    }

    if ($entity_bundle) {
      $allowed_permissions[] = "create {$entity_bundle} {$this->entityTypeId}";
    }

    foreach ($allowed_permissions as $allowed_permission) {
      if ($account->hasPermission($allowed_permission)) {
        return AccessResult::allowed()->addCacheContexts(['user.permissions']);
      }
    }
    return AccessResult::neutral();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc