2017-08-08 1 views
0

l'application Mon Zend Framework 3 gère les commandes:Comment rediriger dans le module et restreindre l'accès sans quitter() dans ZF3?

  • Chaque utilisateur peut rendre une ordonnance.
  • Chaque utilisateur peut voir n'importe quelle commande.
  • Chaque utilisateur peut éditer sa commande s'il est le créateur de cette commande. Sinon, il obtiendra le code d'état et sera redirigé vers la page correspondante.

Mis en œuvre dans le MyModule\Module#onRoute(...) comme suit:

public function onRoute(EventInterface $event) 
{ 
    if ($event->getRequest() instanceof HttpRequest) { 
     ... 
     if (! $acl->isAllowed($role, $controller, $action)) { 
      /** @var Response $response */ 
      $response = $event->getResponse(); 
      $config = $serviceManager->get('config'); 
      $redirectRoute = ! empty($config['acl']['redirect_route']) ? $config['acl']['redirect_route'] : null; 
      if (! empty($redirectRoute)) { 
       $url = $event->getRouter()->assemble($redirectRoute['params'], $redirectRoute['options']); 
       $response->getHeaders()->addHeaderLine('Location', $url); 
       $response->setStatusCode(Response::STATUS_CODE_403); 
       $response->sendHeaders(); 
       exit(); // <-- this makes the code untestable 
      } else { 
       ... 
      } 
     } 
    } elseif ($event->getRequest() instanceof ConsoleRequest) { 
     ... 
    } 
} 

Il travaille. Mais maintenant, j'écris des tests d'intégration et cet appel exit() les brise.

Quelle est l'alternative à la exit() à cet endroit et un moyen propre/propre de redirection dans la classe Module?

Répondre

0

Il fonctionne avec le code 302 (au lieu de 403) Statut:

$response->setStatusCode(Response::STATUS_CODE_302); 
0

le Http Code Resopnse "403" est pas le code redirectional, il est juste pour les erreurs client.

codes suivants sont là pour redirection-

// REDIRECTION CODES 
     300 => 'Multiple Choices', 
     301 => 'Moved Permanently', 
     302 => 'Found', 
     303 => 'See Other', 
     304 => 'Not Modified', 
     305 => 'Use Proxy', 
     306 => 'Switch Proxy', // Deprecated 
     307 => 'Temporary Redirect', 

Maintenant, comme par point

utilisateur peut modifier -Chaque son ordre, s'il est le créateur de cet ordre. Sinon, il recevra le code d'état 403 et sera redirigé vers la page correspondante.

Vous devriez le gérer, juste rediriger vers une page 403 "Interdit" (la page peut avoir votre message)