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; } }