RedirectionStrategy.php 2.07 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

namespace UnicaenAuth\View;

use Zend\Mvc\MvcEvent;
use BjyAuthorize\View\UnauthorizedStrategy;

/**
 * Modification du mécanisme standard : pas de redirection s'il s'agit d'une requête AJAX.
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
 */
class RedirectionStrategy extends \BjyAuthorize\View\RedirectionStrategy
{
    /**
     * Handles redirects in case of dispatch errors caused by unauthorized access
     *
     * @param \Zend\Mvc\MvcEvent $event
     */
    public function onDispatchError(MvcEvent $event)
    {
22
23
24
25
26
        $request        = $event->getRequest();
        $router         = $event->getRouter();
        $sl             = $event->getApplication()->getServiceManager();
        $authService    = $sl->get('Zend\Authentication\AuthenticationService'); //'zfcuser_auth_service'
        $unauthStrategy = $sl->get('BjyAuthorize\View\UnauthorizedStrategy'); /* @var $unauthorizedStrategy UnauthorizedStrategy */
27

28
        // en cas de requête AJAX, on délègue à la stratégie Unauthorized (revoi d'une réponse 403)
29
        if ($request->isXmlHttpRequest()) {
30
            return $unauthStrategy->onDispatchError($event);
31
        }
32
        
33
34
35
36
37
38
39
        // si une identité authentifiée est disponible, pas besoin de se réauthentifier :
        // on délègue donc à la stratégie Unauthorized (réponse 403)
	if ($authService->hasIdentity()) {
	    return $unauthStrategy->onDispatchError($event);
	}
        
        // cuisine nécessaire pour ajouter en paramètre GET l'URL demandée avant redirection vers la page d'authentification
40
41
42
43
44
45
46
47
        if (null === $this->redirectUri) {
            if (($uri = $router->getRequestUri()) && $uri->getPath()) { /* @var $uri \Zend\Uri\Uri */
                $this->redirectUri = $router->assemble(array(), array(
                    'name' => $this->redirectRoute, 
                    'query' => array('redirect' => urlencode($uri->toString()))));
            }
        }
        
48
49
        // délégation à la stratégie standard de redirection vers la page d'authentification
        return parent::onDispatchError($event);
50
51
    }
}