I've created a page using Page Manager, at the route /project/(node}/attendance.

I need to add a custom access check on it, comparing information about the current user with the node to see if they should have access.

I have added a route subscriber, but when I loop through the route collection, my route does not appear. I have read that this is because pages added through the page manager are they themselves nodes.

Is there a way to add a custom access method to a Page Manager route?

2 Answers 2


The module already allows you to create Condition plugins by extending the ConditionPluginBase class.

There is an evaluate() method that you can put your logic in.

This plugin will be available then under the Page manager UI under "Page access" menu:

enter image description here


So, what I ended up doing is extending the Page Manager PageAccessCheck service:

    class: Drupal\custom_route_access\Entity\PageAccessCheck
      - { name: access_check, applies_to: _page_access }

And then:


namespace Drupal\custom_route_access\Entity;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityAccessCheck;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\Routing\Route;

 * We're overriding the page access checks so that we can add our own.
 * Mimics the generic entity access but with a custom key to prevent collisions.
class PageAccessCheck extends EntityAccessCheck {

   * {@inheritdoc}
  public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {

    // Backup the original requirements.
    $original_requirements = $route->getRequirements();

    // Replace it with our entity access value and run the parent access check.
    $route->setRequirement('_entity_access', $route->getRequirement('_page_access'));
    if($route->getPath() === '/project/{node}/take_attendance'){
      return self::takeAttendanceAccess($account);
    $access = parent::access($route, $route_match, $account);

    // Restore the original requirements.

    return $access;

   * Check that user is admin or staff OR has an active team leader registration.
  private static function takeAttendanceAccess($account){

    // ... my custom access check code

  • You could also create Condition using the Drupal\Core\Condition\ConditionPluginBase and use it under "Access" tab on the Page manager UI. Feb 28, 2022 at 16:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.