Db.php 1.53 KB
Newer Older
1 2 3 4
<?php
namespace UnicaenAuth\Provider\Identity;

use BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider;
5 6
use BjyAuthorize\Provider\Role\ProviderInterface;
use ZfcUser\Entity\UserInterface;
7
use Traversable;
8 9 10

/**
 * Classe de fournisseur d'identité issue de la base de données des utilisateurs.
11
 *
12
 * Retourne les rôles de l'utilisateur authentifié.
13
 * NB :
14 15 16 17 18 19 20 21
 * - Les ACL sont fournies par le service d'authorisation du module BjyAuthorize
 * - L'utilisateur authentifié est fournie par le service d'authentification.
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
 */
class Db extends AuthenticationIdentityProvider implements ChainableProvider
{
    /**
Bertrand Gauthier's avatar
Bertrand Gauthier committed
22
     * {@inheritDoc}
23
     */
24
    public function injectIdentityRoles(ChainEvent $event)
Bertrand Gauthier's avatar
Bertrand Gauthier committed
25 26 27
    {
        $event->addRoles($this->getIdentityRoles());
    }
28

Bertrand Gauthier's avatar
Bertrand Gauthier committed
29 30 31 32
    /**
     * {@inheritDoc}
     */
    public function getIdentityRoles()
33
    {
34
        if (!($identity = $this->authService->getIdentity())) {
35
            return [$this->defaultRole];
36
        }
37

38 39 40
        if (is_array($identity) && isset($identity['db'])) {
            $identity = $identity['db'];
        }
41

42 43
        if ($identity instanceof ProviderInterface) {
            $roles = $identity->getRoles();
44 45 46
            if ($roles instanceof Traversable) {
                $roles = iterator_to_array($roles);
            }
47 48
        }
        else {
49
            $roles = [];
50
        }
51

52 53 54
        if ($identity instanceof UserInterface) {
            $roles[] = $identity->getUsername();
        }
55

56 57 58
        return $roles;
    }
}