function Permissions::query

Replace the configured permission with a filter by all roles that have this permission.

Overrides InOperator::query

File

core/modules/user/src/Plugin/views/filter/Permissions.php, line 104

Class

Permissions
Filter handler for user roles.

Namespace

Drupal\user\Plugin\views\filter

Code

public function query() {
  $rids = [];
  $all_roles = Role::loadMultiple();
  // Get all role IDs that have the configured permissions.
  foreach ($this->value as $permission) {
    $roles = array_filter($all_roles, fn(RoleInterface $role) => $role->hasPermission($permission));
    // Method Role::loadMultiple() returns an array with the role IDs as keys,
    // so take the array keys and merge them with previously found role IDs.
    $rids = array_merge($rids, array_keys($roles));
  }
  // Remove any duplicate role IDs.
  $rids = array_unique($rids);
  $this->value = $rids;
  // $this->value contains the role IDs that have the configured permission.
  parent::query();
}

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