permissionHandler = $permission_handler; $this->moduleHandler = $module_handler; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('user.permissions'), $container->get('module_handler') ); } /** * {@inheritdoc} */ public function access(AccountInterface $account) { return $account->hasPermission($this->options['perm']); } /** * {@inheritdoc} */ public function alterRouteDefinition(Route $route) { $route->setRequirement('_permission', $this->options['perm']); } public function summaryTitle() { $permissions = $this->permissionHandler->getPermissions(); if (isset($permissions[$this->options['perm']])) { return $permissions[$this->options['perm']]['title']; } return $this->t($this->options['perm']); } protected function defineOptions() { $options = parent::defineOptions(); $options['perm'] = ['default' => 'access content']; return $options; } public function buildOptionsForm(&$form, FormStateInterface $form_state) { parent::buildOptionsForm($form, $form_state); // Get list of permissions $perms = []; $permissions = $this->permissionHandler->getPermissions(); foreach ($permissions as $perm => $perm_item) { $provider = $perm_item['provider']; $display_name = $this->moduleHandler->getName($provider); $perms[$display_name][$perm] = strip_tags($perm_item['title']); } $form['perm'] = [ '#type' => 'select', '#options' => $perms, '#title' => $this->t('Permission'), '#default_value' => $this->options['perm'], '#description' => $this->t('Only users with the selected permission flag will be able to access this display.'), ]; } /** * {@inheritdoc} */ public function getCacheMaxAge() { return Cache::PERMANENT; } /** * {@inheritdoc} */ public function getCacheContexts() { return ['user.permissions']; } /** * {@inheritdoc} */ public function getCacheTags() { return []; } }