apigee_m10n-8.x-1.7/src/Entity/Access/PurchasedProductUpdateAccessControlHandler.php
src/Entity/Access/PurchasedProductUpdateAccessControlHandler.php
<?php /* * Copyright 2022 Google Inc. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ namespace Drupal\apigee_m10n\Entity\Access; use Drupal\Core\Access\AccessResult; use Drupal\Core\Entity\EntityHandlerInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Session\AccountInterface; use Drupal\entity\EntityAccessControlHandlerBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Access controller for the purchased product entity. */ class PurchasedProductUpdateAccessControlHandler extends EntityAccessControlHandlerBase implements EntityHandlerInterface { /** * The entity type manager. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ protected $entityTypeManager; /** * Route match object. * * @var \Drupal\Core\Routing\RouteMatchInterface */ protected $routeMatch; /** * Constructs an access control handler instance. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type definition. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager * The entity type manager. * @param \Drupal\Core\Routing\RouteMatchInterface $route_match * The route match object. */ public function __construct(EntityTypeInterface $entity_type, EntityTypeManagerInterface $entityTypeManager, RouteMatchInterface $route_match) { parent::__construct($entity_type); $this->entityTypeManager = $entityTypeManager; $this->routeMatch = $route_match; } /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, $container->get('entity_type.manager'), $container->get('current_route_match') ); } /** * {@inheritdoc} */ protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { /** @var \Drupal\apigee_m10n\Entity\PurchasedProductnterface $entity */ $access = parent::checkAccess($entity, $operation, $account); $user = $this->routeMatch->getParameter('user'); return AccessResult::allowedIf( $account->hasPermission('update any purchased_plan') || ($account->hasPermission('update own purchased_plan') && $account->id() === $user->id()) ); } }