3 namespace Drupal\user\Plugin\views\field;
5 use Drupal\Core\Entity\EntityManagerInterface;
6 use Drupal\Core\Extension\ModuleHandlerInterface;
7 use Drupal\views\Plugin\views\display\DisplayPluginBase;
8 use Drupal\views\ViewExecutable;
9 use Drupal\views\Plugin\views\field\PrerenderList;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Field handler to provide a list of permissions.
15 * @ingroup views_field_handlers
17 * @ViewsField("user_permissions")
19 class Permissions extends PrerenderList {
24 * @var \Drupal\user\RoleStorageInterface
26 protected $roleStorage;
31 * @var \Drupal\Core\Extension\ModuleHandlerInterface
33 protected $moduleHandler;
36 * Constructs a Drupal\Component\Plugin\PluginBase object.
38 * @param array $configuration
39 * A configuration array containing information about the plugin instance.
40 * @param string $plugin_id
41 * The plugin_id for the plugin instance.
42 * @param mixed $plugin_definition
43 * The plugin implementation definition.
44 * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
46 * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
49 public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager) {
50 parent::__construct($configuration, $plugin_id, $plugin_definition);
52 $this->roleStorage = $entity_manager->getStorage('user_role');
53 $this->moduleHandler = $module_handler;
59 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
60 return new static($configuration, $plugin_id, $plugin_definition, $container->get('module_handler'), $container->get('entity.manager'));
66 public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
67 parent::init($view, $display, $options);
69 $this->additional_fields['uid'] = ['table' => 'users_field_data', 'field' => 'uid'];
72 public function query() {
73 $this->addAdditionalFields();
74 $this->field_alias = $this->aliases['uid'];
77 public function preRender(&$values) {
80 $permission_names = \Drupal::service('user.permissions')->getPermissions();
83 foreach ($values as $result) {
84 $user_rids = $this->getEntity($result)->getRoles();
85 $uid = $this->getValue($result);
87 foreach ($user_rids as $rid) {
93 $roles = $this->roleStorage->loadMultiple(array_keys($rids));
94 foreach ($rids as $rid => $role_uids) {
95 foreach ($roles[$rid]->getPermissions() as $permission) {
96 foreach ($role_uids as $uid) {
97 $this->items[$uid][$permission]['permission'] = $permission_names[$permission]['title'];
102 foreach ($this->items as &$permission) {
108 public function render_item($count, $item) {
109 return $item['permission'];