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

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

namespace Drupal\content_entity_base\Entity\Access;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;


/**
 * Iterates content entities and aggregates permissions provided by their
 * permission provider handler classes.
 */
class EntityPermissionBuilder implements ContainerInjectionInterface {

  use StringTranslationTrait;

  /**
   * @var \Drupal\Core\Entity\EntityManagerInterface
   */
  protected $entity_type_manager;

  /**
   * Creates Drupal\content_entity_base\Entity\Access\EntityBasePermissions.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager
   */
  public function __construct(EntityTypeManagerInterface $entity_manager) {
    $this->entity_type_manager = $entity_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager')
    );
  }

  public function providedPermissions() {
    // Get entities which have a permission_provider defined.
    $content_entity_collection = array_filter($this->entity_type_manager->getDefinitions(), function ($entity_definition) {
      return ($this->entity_type_manager->hasHandler($entity_definition->id(), 'permission_provider'));
    });

    // Get all permission  provider handlers.
    $providers = array_map(function ($entity_definition) {
      $handler = $this->entity_type_manager->getHandler($entity_definition->id(), 'permission_provider');
      return $handler;
    }, $content_entity_collection);

    $permissions = [];
    foreach ($providers as $entity_type_id => $handler) {
      $permissions += $handler->entityPermissions();
    }
    return $permissions;
  }

}

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

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