og-8.x-1.x-dev/src/Access/OgMembershipAddAccessCheck.php

src/Access/OgMembershipAddAccessCheck.php
<?php

declare(strict_types=1);

namespace Drupal\og\Access;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Routing\Access\AccessInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\og\Og;
use Drupal\og\OgMembershipInterface;
use Drupal\og\OgMembershipTypeInterface;

/**
 * Check if a user has access to the group's membership pages.
 */
class OgMembershipAddAccessCheck implements AccessInterface {

  public function __construct(
    protected readonly EntityTypeManagerInterface $entityTypeManager,
  ) {}

  /**
   * Checks access to create the entity type and bundle for the given route.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The parametrized route.
   * @param \Drupal\Core\Session\AccountInterface $account
   *   The currently logged in account.
   * @param \Drupal\Core\Entity\EntityInterface $group
   *   The group entity.
   * @param \Drupal\og\OgMembershipTypeInterface $og_membership_type
   *   The membership type entity.
   *
   * @return \Drupal\Core\Access\AccessResultInterface
   *   The access result.
   */
  public function access(RouteMatchInterface $route_match, AccountInterface $account, ?EntityInterface $group = NULL, ?OgMembershipTypeInterface $og_membership_type = NULL) {
    // The $group param will be null if it is from the
    // Drupal\og\Event\OgAdminRoutesEvent rather than the routing.yml version.
    if (is_null($group)) {
      $entity_type_id = $route_match->getRouteObject()
        ->getOption('_og_entity_type_id');
      $group = $route_match->getParameter($entity_type_id);
    }

    if (!Og::isGroup($group->getEntityTypeId(), $group->bundle())) {
      return AccessResult::forbidden();
    }

    $membership_type_id = OgMembershipInterface::TYPE_DEFAULT;
    if (!is_null($og_membership_type)) {
      $membership_type_id = $og_membership_type->id();
    }

    $context = ['group' => $group];

    return $this->entityTypeManager
      ->getAccessControlHandler('og_membership')
      ->createAccess($membership_type_id, $account, $context, TRUE);
  }

}

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

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