You are here

class ConfigPermsAccessCheck in Custom Permissions 8.2

Checks access for custom_perms routes.

Hierarchy

Expanded class hierarchy of ConfigPermsAccessCheck

1 string reference to 'ConfigPermsAccessCheck'
config_perms.services.yml in ./config_perms.services.yml
config_perms.services.yml
1 service uses ConfigPermsAccessCheck
config_perms.access_checker in ./config_perms.services.yml
Drupal\config_perms\Access\ConfigPermsAccessCheck

File

src/Access/ConfigPermsAccessCheck.php, line 14

Namespace

Drupal\config_perms\Access
View source
class ConfigPermsAccessCheck implements AccessInterface {

  /**
   * The entityTypeManager service.
   *
   * @var \Drupal\Core\Entity\EntityTypeManager
   */
  protected $entityTypeManager;

  /**
   * Constructor.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   Run access checks for this account.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The Entity Type Manager.
   */
  public function __construct(AccountInterface $account, EntityTypeManagerInterface $entity_type_manager) {
    $this->entityTypeManager = $entity_type_manager;
  }

  /**
   * A custom access check.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   Run access checks for this account.
   * @param \Drupal\Core\Routing\RouteMatch $routeMatch
   *   The routeMatch object.
   *
   * @return \Drupal\Core\Access\AccessResult
   *   Determine if the user is allowed to access the route.
   */
  public function access(AccountInterface $account, RouteMatch $routeMatch) {
    $custom_perms_storage = $this->entityTypeManager
      ->getStorage('custom_perms_entity');
    $params = [
      'status' => TRUE,
    ];
    $custom_perms = $custom_perms_storage
      ->loadByProperties($params);
    $access_result = AccessResult::forbidden();

    // If for for some reason there is not a custom_perm then return forbidden.
    if (empty($custom_perms)) {
      return $access_result;
    }

    /** @var \Drupal\config_perms\Entity\CustomPermsEntity $custom_perm */
    foreach ($custom_perms as $custom_perm) {
      $routes = config_perms_parse_path($custom_perm
        ->getRoute());
      if (!in_array($routeMatch
        ->getRouteName(), $routes)) {
        continue;
      }
      $access_result = AccessResult::allowedIf($account
        ->hasPermission($custom_perm
        ->label()));
    }
    return $access_result;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigPermsAccessCheck::$entityTypeManager protected property The entityTypeManager service.
ConfigPermsAccessCheck::access public function A custom access check.
ConfigPermsAccessCheck::__construct public function Constructor.