in RouteSubscriber.php
namespace Drupal\MODULENAME\Routing;
use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;
use Drupal\Core\Routing\RoutingEvents;
/**
* Class RouteSubscriber.
*
* @package Drupal\MODULENAME\Routing
* Listens to the dynamic route events.
*/
class RouteSubscriber extends RouteSubscriberBase {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[RoutingEvents::ALTER] = ['onAlterRoutes',-9999]; // negative Values means "late"
return $events;
}
/**
* {@inheritdoc}
*/
protected function alterRoutes(RouteCollection $collection) {
if ($route = $collection->get('entity.node.edit_form')) {
$route->setRequirement('_custom_access','\Drupal\MODULENAME\Controller\MYCONTROLLER::access');
}
}
}
and in MYCONTROLLER.php
namespace Drupal\MODULENAME\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Session\AccountInterface;
/**
* Class Inactiveusers
* @package Drupal\MODULENAME\Controller
*/
class MYCONTROLLER extends ControllerBase {
function access(AccountInterface $account){
if($node = \Drupal::routeMatch()->getParameter('node')){
if ($node->getType() == 'page' && $node->isPublished()) {
return \Drupal\Core\Access\AccessResult::forbidden();
}return \Drupal\Core\Access\AccessResult::neutral();
}
return \Drupal\Core\Access\AccessResult::neutral();
}
}