entityType = $entity_type; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity_type.manager')->getDefinition('user_role') ); } /** * {@inheritdoc} */ public function defaultConfiguration() { return [ 'rid' => '', ]; } /** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $roles = Role::loadMultiple(); unset($roles[RoleInterface::ANONYMOUS_ID]); unset($roles[RoleInterface::AUTHENTICATED_ID]); $roles = array_map(fn(RoleInterface $role) => $role->label(), $roles); $form['rid'] = [ '#type' => 'radios', '#title' => $this->t('Role'), '#options' => $roles, '#default_value' => $this->configuration['rid'], '#required' => TRUE, ]; return $form; } /** * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { $this->configuration['rid'] = $form_state->getValue('rid'); } /** * {@inheritdoc} */ public function calculateDependencies() { if (!empty($this->configuration['rid'])) { $prefix = $this->entityType->getConfigPrefix() . '.'; $this->addDependency('config', $prefix . $this->configuration['rid']); } return $this->dependencies; } /** * {@inheritdoc} */ public function access($object, ?AccountInterface $account = NULL, $return_as_object = FALSE) { /** @var \Drupal\user\UserInterface $object */ $access = $object->access('update', $account, TRUE) ->andIf($object->roles->access('edit', $account, TRUE)); return $return_as_object ? $access : $access->isAllowed(); } }