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