diff --git a/Module.php b/Module.php index b79872f520aafb5647275b85ea38a4e9c9bb6940..b4d473d542f12285e9069d7bd8f8b0f91de28e80 100644 --- a/Module.php +++ b/Module.php @@ -2,7 +2,6 @@ namespace UnicaenAuth; -use UnicaenAuth\Guard\PrivilegeController; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\ModuleManager\Feature\ConfigProviderInterface; use Zend\ModuleManager\Feature\ServiceProviderInterface; @@ -12,7 +11,7 @@ use Zend\ModuleManager\Feature\ServiceProviderInterface; * * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> */ -class Module implements ConfigProviderInterface, ServiceProviderInterface +class Module implements AutoloaderProviderInterface, ConfigProviderInterface, ServiceProviderInterface { /** * diff --git a/src/UnicaenAuth/Guard/PrivilegeController.php b/src/UnicaenAuth/Guard/PrivilegeController.php index 99b4f2d5158d71343f774be4730b6faba5500331..153564fd5be3503ce551c53d44e563f0e44dce97 100644 --- a/src/UnicaenAuth/Guard/PrivilegeController.php +++ b/src/UnicaenAuth/Guard/PrivilegeController.php @@ -9,7 +9,7 @@ use UnicaenApp\Traits\SessionContainerTrait; /** - * Description of ControllerGuard + * Description of PrivilegeController * * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> */ @@ -30,9 +30,6 @@ class PrivilegeController extends Controller protected function privilegesToRoles(array $rules) { -// $session = $this->getSessionContainer(); -// if (! isset($session->rules)){ - $pr = $this->getPrivilegeProvider()->getPrivilegesRoles(); foreach ($rules as $index => $rule) { @@ -56,9 +53,6 @@ class PrivilegeController extends Controller } return $rules; -// $session->rules = $rules; -// } -// return $session->rules; } diff --git a/src/UnicaenAuth/Guard/PrivilegeRoute.php b/src/UnicaenAuth/Guard/PrivilegeRoute.php new file mode 100644 index 0000000000000000000000000000000000000000..1d66b4e30e36aec654a807b79702050f568ce134 --- /dev/null +++ b/src/UnicaenAuth/Guard/PrivilegeRoute.php @@ -0,0 +1,77 @@ +<?php + +namespace UnicaenAuth\Guard; + +use BjyAuthorize\Guard\Route; +use Zend\ServiceManager\ServiceLocatorInterface; +use UnicaenAuth\Provider\Privilege\PrivilegeProviderAwareTrait; +use UnicaenApp\Traits\SessionContainerTrait; + + +/** + * Description of PrivilegeRoute + * + * @author Laurent LECLUSE <laurent.lecluse at unicaen.fr> + */ +class PrivilegeRoute extends Route +{ + use PrivilegeProviderAwareTrait; + use SessionContainerTrait; + + + + public function __construct(array $rules, ServiceLocatorInterface $serviceLocator) + { + $this->serviceLocator = $serviceLocator; + parent::__construct($this->privilegesToRoles($rules), $serviceLocator); + } + + + + protected function privilegesToRoles(array $rules) + { + $pr = $this->getPrivilegeProvider()->getPrivilegesRoles(); + + foreach ($rules as $index => $rule) { + if (isset($rule['privileges'])) { + $rolesCount = 0; + $privileges = (array)$rule['privileges']; + $rule['roles'] = isset($rule['roles']) ? (array)$rule['roles'] : []; + foreach ($pr as $privilege => $roles) { + if (in_array($privilege, $privileges)) { + $rolesCount += count($roles); + $rule['roles'] = array_unique(array_merge($rule['roles'], $roles)); + } + } + unset($rule['privileges']); + if (0 < count($rule['roles'])) { + $rules[$index] = $rule; + }else{ + unset($rules[$index]); + } + } + } + + return $rules; + } + + + + /** + * Pour récupérer le serviceLocator depuis les traits de service + * + * @return ServiceLocatorInterface + */ + protected function getServiceLocator() + { + return $this->serviceLocator; + } + + + + public static function getResourceId($route) + { + return 'route/'.$route; + } + +} \ No newline at end of file