Pimcore – Gérer des droits sur le front
Pimcore est extrèment puissant pour gérer des droits dans le back-office, mais avec un peu de code, on peut rapidement en faire de même sur le front…
On peut avoir besoin de restreindre l’accès à certaines pages sur le front selon les profils de chacun.
Voici un tutorial pour mettre ça en place.
1/ Librairie
Voici la librairie que nous avons écrit pour ça :
<?php /** * Couche de sécurité * * @category Website * @package Cultivonsleweb * @author Arnaud Méhat pour Cultivons le web <contact at cultivonsleweb.com> */ class Website_Cultivonsleweb_Security extends Zend_Controller_Action_Helper_Redirector{ static public $idUser=null; public $bRedirect=true; const ACCES_DENIED="ACCES DENIED"; /** * Vérifie que l'utilisateur est connecté * * @return boolean * @static */ public function isConnected ( ){ Pimcore_Tool_Authentication::initSession(); $adminSession = new Zend_Session_Namespace("pimcore_admin"); if ( !$adminSession->user instanceof User) { if (true == $this->bRedirect){ $this->_redirect('/login'); return false; } else { echo constant('self::ACCES_DENIED'); return false; } } else { $userid = $adminSession->user->getId(); self::setIdUser ( $userid ); $user = User::getById($userid); $user->getRoles (); $allow = self::isAllowed ( $userid ); if ( true == $allow){ //$allow = 'true'; return true; } else { if (true == $this->bRedirect){ $this->_redirect('/login'); return false; } else { echo constant('self::ACCES_DENIED'); return false; } } } } /** * Informe si l'utilisateur a accès à la ressource * * @param int $userid * @return boolean * @access public * @static */ static public function isAllowed ( $userid ){ $oDb = new Website_Cultivonsleweb_Db (); $db = $oDb->init (); $sql = "SELECT * FROM users WHERE id='" . $userid . "'"; $result = $db->fetchAll($sql); if ( (0 == count($result)) || (1 > count($result)) ){ return false; } for ($i=0; $i < count($result); $i++){ $roles = $result[$i]['roles']; } $aRole = explode( ",", $roles); $frontController = Zend_Controller_Front::getInstance(); $request = $frontController->getRequest(); $params = $request->getParams (); $oDocument = $params['document']; foreach ( $oDocument as $key => $value){ if( 'path' == $key){ $path = $value; } } if ( '/' == substr($path, count($path)-1, count($path))){ $path = substr( $path, 0,-1); } //echo $path; $sql = "SELECT * FROM users_workspaces_document "; $sql .= "WHERE cpath='". $path ."' AND view=1 "; $sql .= "AND userId IN ($roles)"; //echo $sql; $result = $db->fetchAll ($sql); //print_r ($result); if ( 1 <= count ($result)){ return true; } else { return false; } //$sql = "SELECT * FROM users_workspaces_document WHERE return $user->isAllowed("documents FROM users_permission_definitions"); } /** * setter id utilisateur * * @param Int $idUser * @static */ static public function setIdUser ($idUser){ self::$idUser = $idUser; } /** * getter id utilisateur * * @return Int $idUser * @static */ static public function getIdUSer (){ return self::$idUser; } /** * Retourne l'adresse ip du client * * @return string ip * @static * @access public */ static public function getIpClient (){ if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])){ $ip = $_SERVER['HTTP_CLIENT_IP']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } }
2/ Contrôlleur
Nous instancions cette classe de la façon suivant :
class ExampleController extends Website_Controller_Action { public function defaultAction () { $Security = new Website_Cultivonsleweb_Security(); $Security->isConnected ( ); } }
Si l’utilisateur n’est pas connecté, il sera redirigé sur la page de login.
De même si l’utilisateur n’a pas les droits définis pour voir cette page, il sera aussi redirigé vers la page de login.
3/ Admin
Dans le back-office, nous allons maintenant gérer les droits de la page « default » (qui correspond au contrôlleur « example » et à l’action « default »).
Nous nous connectons au back-office, nous ouvrons la page configuration > utilisateurs / rôles > rôles.
Nous ajoutons un rôle.
Dans l’onglet « Configuration », on coche « Document ».
Dans l’onglet « Zone de travail », on ajoute une ligne au tableau « Document ».
Dans la colonne « Chemin », on y glisse notre page « default » et on coche la case « Voir ».
Désormais, tous les utilisateurs qui appartienne à ce rôle, pourront avoir accès à la page « default »
Voir aussi
– Pimcore – Créer une authentification sur le front : http://www.acyclique.com/codus/pimcore-creer-une-authentification-sur-le-front/
– Pimcore – Ajouter sa propre couche de base de données : http://www.acyclique.com/codus/pimcore-ajouter-sa-propre-couche-de-base-de-donnees/