Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProfilePermissions
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 3
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 create
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 permissions
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder;
6
7use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
8use Drupal\Core\Entity\EntityTypeManagerInterface;
9use Drupal\Core\StringTranslation\StringTranslationTrait;
10use Symfony\Component\DependencyInjection\ContainerInterface;
11
12/**
13 * Provides dynamic permissions of the display_builder module.
14 */
15class ProfilePermissions implements ContainerInjectionInterface {
16
17  use StringTranslationTrait;
18
19  /**
20   * The entity type manager.
21   *
22   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
23   */
24  protected $entityTypeManager;
25
26  /**
27   * Constructs a new ProfilePermissions instance.
28   *
29   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
30   *   The entity type manager.
31   */
32  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
33    $this->entityTypeManager = $entity_type_manager;
34  }
35
36  /**
37   * {@inheritdoc}
38   */
39  public static function create(ContainerInterface $container): ProfilePermissions {
40    return new static($container->get('entity_type.manager'));
41  }
42
43  /**
44   * Returns an array of permissions.
45   *
46   * @return array
47   *   An array of permissions keyed by permission name.
48   */
49  public function permissions(): array {
50    $permissions = [];
51    // Generate permissions for each display builder. Warn the administrator
52    // that any of them are potentially unsafe.
53    /** @var \Drupal\display_builder\ProfileInterface[] $builders */
54    $builders = $this->entityTypeManager->getStorage('display_builder_profile')->loadMultiple();
55    \uasort($builders, 'Drupal\Core\Config\Entity\ConfigEntityBase::sort');
56
57    foreach ($builders as $builder) {
58      $permission = $builder->getPermissionName();
59      $permissions[$permission] = [
60        'title' => $this->t(
61          'Use the %label display builder',
62          [
63            '%label' => $builder->label(),
64          ]
65        ),
66        'description' => [
67          '#prefix' => '<em>',
68          '#markup' => $this->t('Warning: This permission may have security implications depending on how the display builder is configured.'),
69          '#suffix' => '</em>',
70        ],
71        // This permission is generated on behalf of $builder display builder,
72        // therefore add this display builder as a config dependency.
73        'dependencies' => [
74          $builder->getConfigDependencyKey() => [
75            $builder->getConfigDependencyName(),
76          ],
77        ],
78      ];
79    }
80
81    return $permissions;
82  }
83
84}