adva-8.x-1.0-rc9/src/Plugin/adva/AccessProvider/AnonymousAccessProvider.php

src/Plugin/adva/AccessProvider/AnonymousAccessProvider.php
<?php

namespace Drupal\adva\Plugin\adva\AccessProvider;

use Drupal\adva\Plugin\adva\EntityTypeAccessProvider;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;

/**
 * Provides anonymous access to entities.
 *
 * Anonymous access exposes content to anonymous users by providing selected
 * grants to anonymous users.
 *
 * @AccessProvider(
 *   id = "anonymous",
 *   label = @Translation("Anonymous Access"),
 *   operations = {
 *     "view",
 *     "update",
 *     "delete",
 *   },
 * )
 */
class AnonymousAccessProvider extends EntityTypeAccessProvider {

  /**
   * {@inheritdoc}
   */
  public function getAccessGrants($operation, AccountInterface $account) {
    return ['anonymous' => [1]];
  }

  /**
   * {@inheritdoc}
   */
  public function buildOperationConfigForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildOperationConfigForm($form, $form_state);
    $context = [
      '%op' => $form['#entity_op'],
    ];
    $defaults = [];
    switch ($form['#entity_op_type']) {
      case EntityTypeAccessProvider::ENTITY_TYPE_OP:
        $defaults = isset($this->configuration['operations'][$form['#entity_op']]) ? $this->configuration['operations'][$form['#entity_op']] : [];
        break;

      case EntityTypeAccessProvider::ENTITY_DEFAULT_OP:
        $config = isset($this->configuration['default']['operations']) ? $this->configuration['default']['operations'] : [];
        $defaults = isset($config[$form['#entity_op']]) ? $config[$form['#entity_op']] : [];
        break;

      case EntityTypeAccessProvider::ENTITY_BUNDLE_OP:
        if (isset($form['#entity_bundle'])) {
          $config = isset($this->configuration['bundles']['override'][$form['#entity_bundle']]['operations']) ? $this->configuration['bundles']['override'][$form['#entity_bundle']]['operations'] : [];
          $defaults = isset($config[$form['#entity_op']]) ? $config[$form['#entity_op']] : [];
        }
        break;
    }
    $form_parents = $form['#parents'];
    $form['anonymous'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Grant <em>%op</em> to anonymous users.', $context),
      '#parents' => array_merge($form_parents, ['anonymous']),
      '#default_value' => isset($defaults['anonymous']),
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitOperationConfigForm(array $form, FormStateInterface $form_state) {
    parent::submitOperationConfigForm($form, $form_state);
    $new_config = array_filter($form_state->getValues());

    if (!isset($form['#entity_op']) || !isset($form['#entity_op_type'])) {
      return;
    }

    switch ($form['#entity_op_type']) {
      case EntityTypeAccessProvider::ENTITY_TYPE_OP:
        $this->configuration['operations'][$form['#entity_op']] = $new_config;
        break;

      case EntityTypeAccessProvider::ENTITY_DEFAULT_OP:
        $this->configuration['default']['operations'][$form['#entity_op']] = $new_config;
        break;

      case EntityTypeAccessProvider::ENTITY_BUNDLE_OP:
        if (isset($form['#entity_bundle'])) {
          $this->configuration['bundles']['override'][$form['#entity_bundle']]['operations'][$form['#entity_op']] = $new_config;
        }
        break;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getAccessRecordsFromConfig(array $config) {
    return [
      [
        'realm' => 'anonymous',
        'gid' => 1,
        'grant_view' => (isset($config['view']['anonymous']) && $config['view']['anonymous']) ? 1 : 0,
        'grant_update' => (isset($config['update']['anonymous']) && $config['update']['anonymous']) ? 1 : 0,
        'grant_delete' => (isset($config['delete']['anonymous']) && $config['delete']['anonymous']) ? 1 : 0,
      ],
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc