99acbb9c6b2a1d652ed2add972627aaa20725f68
[yaffs-website] / vendor / drupal / console / src / Command / Debug / PermissionCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\PermissionDebugCommand.
6  */
7
8 namespace Drupal\Console\Command\Debug;
9
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Output\OutputInterface;
12 use Symfony\Component\Console\Input\InputArgument;
13 use Drupal\Console\Core\Command\ContainerAwareCommand;
14
15 /**
16  * Class DebugCommand
17  *
18  * @package Drupal\Console\Command\Debug
19  */
20 class PermissionCommand extends ContainerAwareCommand
21 {
22     /**
23      * {@inheritdoc}
24      */
25     protected function configure()
26     {
27         $this->setName('debug:permission')
28             ->setDescription($this->trans('commands.debug.permission.description'))
29             ->setHelp($this->trans('commands.debug.permission.help'))
30             ->addArgument(
31                 'role',
32                 InputArgument::OPTIONAL,
33                 $this->trans('commands.debug.permission.arguments.role')
34             )->setAliases(['dp']);
35     }
36
37     /**
38      * {@inheritdoc}
39      */
40     protected function execute(InputInterface $input, OutputInterface $output)
41     {
42         $role = $input->getArgument('role');
43         // No role specified, show a list of ALL permissions.
44         if (!$role) {
45             $tableHeader = [
46                 $this->trans('commands.debug.permission.table-headers.permission-name'),
47                 $this->trans('commands.debug.permission.table-headers.permission-label'),
48                 $this->trans('commands.debug.permission.table-headers.permission-role')
49             ];
50             $tableRows = [];
51             $permissions = \Drupal::service('user.permissions')->getPermissions();
52             foreach ($permissions as $permission_name => $permission) {
53                 $tableRows[$permission_name] = [
54                     $permission_name,
55                     strip_tags($permission['title']->__toString()),
56                     implode(', ', $this->getRolesAssignedByPermission($permission_name))
57                 ];
58             }
59
60             ksort($tableRows);
61             $this->getIo()->table($tableHeader, array_values($tableRows));
62
63             return true;
64         } else {
65             $tableHeader = [
66                 $this->trans('commands.debug.permission.table-headers.permission-name'),
67                 $this->trans('commands.debug.permission.table-headers.permission-label')
68             ];
69             $tableRows = [];
70             $permissions = \Drupal::service('user.permissions')->getPermissions();
71             $roles = user_roles();
72             if (empty($roles[$role])) {
73                 $message = sprintf($this->trans('commands.debug.permission.messages.role-error'), $role);
74                 $this->getIo()->error($message);
75                 return true;
76             }
77             $user_permission = $roles[$role]->getPermissions();
78             foreach ($permissions as $permission_name => $permission) {
79                 if (in_array($permission_name, $user_permission)) {
80                     $tableRows[$permission_name] = [
81                       $permission_name,
82                       strip_tags($permission['title']->__toString())
83                     ];
84                 }
85             }
86             ksort($tableRows);
87             $this->getIo()->table($tableHeader, array_values($tableRows));
88             return true;
89         }
90     }
91
92     /**
93      * Get user roles Assigned by Permission.
94      *
95      * @param string $permission_name
96      *   Permission Name.
97      *
98      * @return array
99      *   User roles filtered by permission else empty array.
100      */
101     public function getRolesAssignedByPermission($permission_name)
102     {
103         $roles = user_roles();
104         $roles_found = [];
105         foreach ($roles as $role) {
106             if ($role->hasPermission($permission_name)) {
107                 $roles_found[] = $role->getOriginalId();
108             }
109         }
110         return $roles_found;
111     }
112 }