arch-8.x-1.x-dev/modules/stock/src/Access/StockPermissions.php

modules/stock/src/Access/StockPermissions.php
<?php

namespace Drupal\arch_stock\Access;

use Drupal\arch_stock\Entity\Storage\WarehouseStorageInterface;
use Drupal\arch_stock\Entity\WarehouseInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides dynamic permissions of the stock module.
 */
class StockPermissions implements ContainerInjectionInterface {

  use StringTranslationTrait;

  /**
   * The warehouse storage.
   *
   * @var \Drupal\arch_stock\Entity\Storage\WarehouseStorageInterface
   */
  protected $warehouseStorage;

  /**
   * Constructs a StockPermissions instance.
   *
   * @param \Drupal\arch_stock\Entity\Storage\WarehouseStorageInterface $warehouse_storage
   *   Warehouse storage.
   */
  public function __construct(
    WarehouseStorageInterface $warehouse_storage,
  ) {
    $this->warehouseStorage = $warehouse_storage;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager')->getStorage('warehouse')
    );
  }

  /**
   * Get stock permissions.
   *
   * @return array
   *   Permissions array.
   */
  public function permissions() {
    $permissions = [];
    foreach ($this->warehouseStorage->loadMultiple() as $warehouse) {
      /** @var \Drupal\arch_stock\Entity\WarehouseInterface $warehouse */
      $permissions += $this->buildPermissions($warehouse);
    }
    return $permissions;
  }

  /**
   * Builds a standard list of warehouse permissions.
   *
   * @param \Drupal\arch_stock\Entity\WarehouseInterface $warehouse
   *   The warehouse.
   *
   * @return array
   *   An array of permission names and descriptions.
   */
  protected function buildPermissions(WarehouseInterface $warehouse) {
    $id = $warehouse->id();
    $args = ['%warehouse' => $warehouse->label()];

    return [
      "purchase from {$id} stock" => [
        'title' => $this->t('Purchase from %warehouse stock', $args, ['context' => 'arch_stock']),
      ],
      "create {$id} stock" => [
        'title' => $this->t('Create %warehouse stock', $args, ['context' => 'arch_stock']),
        'restrict access' => TRUE,
      ],
      "delete {$id} stock" => [
        'title' => $this->t('Delete %warehouse stock', $args, ['context' => 'arch_stock']),
        'restrict access' => TRUE,
      ],
      "edit {$id} stock" => [
        'title' => $this->t('Edit %warehouse stock', $args, ['context' => 'arch_stock']),
        'restrict access' => TRUE,
      ],
    ];
  }

}

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

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