class LayoutBuilderOverridesPermissions

Same name and namespace in other branches
  1. 9 core/modules/layout_builder/src/LayoutBuilderOverridesPermissions.php \Drupal\layout_builder\LayoutBuilderOverridesPermissions
  2. 10 core/modules/layout_builder/src/LayoutBuilderOverridesPermissions.php \Drupal\layout_builder\LayoutBuilderOverridesPermissions
  3. 11.x core/modules/layout_builder/src/LayoutBuilderOverridesPermissions.php \Drupal\layout_builder\LayoutBuilderOverridesPermissions

Provides dynamic permissions for Layout Builder overrides.

@internal Dynamic permission callbacks are internal.

Hierarchy

Expanded class hierarchy of LayoutBuilderOverridesPermissions

See also

\Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage::access()

File

core/modules/layout_builder/src/LayoutBuilderOverridesPermissions.php, line 19

Namespace

Drupal\layout_builder
View source
class LayoutBuilderOverridesPermissions implements ContainerInjectionInterface {
    use StringTranslationTrait;
    
    /**
     * The entity type manager.
     *
     * @var \Drupal\Core\Entity\EntityTypeManagerInterface
     */
    protected $entityTypeManager;
    
    /**
     * The entity type bundle info service.
     *
     * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
     */
    protected $bundleInfo;
    
    /**
     * LayoutBuilderOverridesPermissions constructor.
     *
     * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
     *   The entity type manager.
     * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info
     *   The bundle info service.
     */
    public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $bundle_info) {
        $this->entityTypeManager = $entity_type_manager;
        $this->bundleInfo = $bundle_info;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container) {
        return new static($container->get('entity_type.manager'), $container->get('entity_type.bundle.info'));
    }
    
    /**
     * Returns an array of permissions.
     *
     * @return string[][]
     *   An array whose keys are permission names and whose corresponding values
     *   are defined in \Drupal\user\PermissionHandlerInterface::getPermissions().
     */
    public function permissions() {
        $permissions = [];
        
        /** @var \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface[] $entity_displays */
        $entity_displays = $this->entityTypeManager
            ->getStorage('entity_view_display')
            ->loadByProperties([
            'third_party_settings.layout_builder.allow_custom' => TRUE,
        ]);
        foreach ($entity_displays as $entity_display) {
            $entity_type_id = $entity_display->getTargetEntityTypeId();
            $entity_type = $this->entityTypeManager
                ->getDefinition($entity_type_id);
            $bundle = $entity_display->getTargetBundle();
            $args = [
                '%entity_type' => $entity_type->getCollectionLabel(),
                '@entity_type_singular' => $entity_type->getSingularLabel(),
                '@entity_type_plural' => $entity_type->getPluralLabel(),
                '%bundle' => $this->bundleInfo
                    ->getBundleInfo($entity_type_id)[$bundle]['label'],
            ];
            if ($entity_type->hasKey('bundle')) {
                $permissions["configure all {$bundle} {$entity_type_id} layout overrides"] = [
                    'title' => $this->t('%entity_type - %bundle: Configure all layout overrides', $args),
                    'warning' => $this->t('Warning: Allows configuring the layout even if the user cannot edit the @entity_type_singular itself.', $args),
                ];
                $permissions["configure editable {$bundle} {$entity_type_id} layout overrides"] = [
                    'title' => $this->t('%entity_type - %bundle: Configure layout overrides for @entity_type_plural that the user can edit', $args),
                ];
            }
            else {
                $permissions["configure all {$bundle} {$entity_type_id} layout overrides"] = [
                    'title' => $this->t('%entity_type: Configure all layout overrides', $args),
                    'warning' => $this->t('Warning: Allows configuring the layout even if the user cannot edit the @entity_type_singular itself.', $args),
                ];
                $permissions["configure editable {$bundle} {$entity_type_id} layout overrides"] = [
                    'title' => $this->t('%entity_type: Configure layout overrides for @entity_type_plural that the user can edit', $args),
                ];
            }
        }
        return $permissions;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
LayoutBuilderOverridesPermissions::$bundleInfo protected property The entity type bundle info service.
LayoutBuilderOverridesPermissions::$entityTypeManager protected property The entity type manager.
LayoutBuilderOverridesPermissions::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create
LayoutBuilderOverridesPermissions::permissions public function Returns an array of permissions.
LayoutBuilderOverridesPermissions::__construct public function LayoutBuilderOverridesPermissions constructor.
StringTranslationTrait::$stringTranslation protected property The string translation service.
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.