IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Avis] Gestion des droits utilisateurs


Sujet :

Langage PHP

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut [Avis] Gestion des droits utilisateurs
    Bonjour à tous,

    je recherche au travers de ce post vos divers point de vue et conseils sur la façon de gérer des droits d'accès à une application.
    La classe présentée ci dessous me permet :
    - De donner des droits au niveau des groupes utilisateurs
    - De donner des droits au niveau utilisateurs

    Ainsi il est possible d'interdire tout le groupe modérateur de supprimer des messages mais de laisser un utilisateur spécifique le faire malgré son appartenance à ce groupe.
    La classe est également utilisable dans un cas ou il n'y aurai pas de groupe mais juste des utilisateurs.

    Ma gestion des droits reposes sur une bdd avec :
    - Une table droits regroupant tous les droits
    - une table droits_groupe : associant les droits au groupe (si le couple idGroupe/idDroit existe , alors le groupe est autorisé sur ce droit)
    - une table droits_user ; même principe mais avec les utilisateurs.

    Généralement je génère l'object ACL à la connection en recherchant toutes les droits (ressources) puis les droits spécifiques pour les groupes et les utilisateurs. L'objet est ensuite sérialiser via sleep puis trimballer en session. Donc en principe je ne fait qu'une seule fois 3 requêtes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    class Auth_ACL
    {
    	/**
    	 * Etat des ressources pour l'utilisateur
    	 * @var array
    	 * @access private
    	 */
    	private $userRessources;
     
    	/**
    	 * Etat des ressources pour le groupe
    	 * @var array
    	 * @access private
    	 */
    	private $groupRessources;
     
    	/**
    	 * L'utilisateur à t'il tous les droits
    	 * @var boolean
    	 * @access private
    	 */
    	private $isGod;
     
    	/**
    	 * Constructeur
    	 * @param boolean $god
    	 */
    	public function __construct($god = false)
    	{
    		$this->userRessources 	= array();
    		$this->groupRessources	= array();
    		$this->isGod			= $god;
    	}
     
    	/**
    	 * Ajoute les ressources disponibles
    	 * @param mixed $ressources Tableau de ressources ou ressource seule
    	 * @return void
    	 */
    	public function addRessource($ressources)
    	{
    		if(is_array($ressources))
    		{
    			foreach($ressources as $ressource)
    			{
    				$this->groupRessources[$ressource] = false;
    				$this->userRessources[$ressource]  = false;
    			}
    		}
    		else
    		{
    			$this->groupRessources[$ressources] = false;
    			$this->userRessources[$ressources]  = false;
    		}
    	}
     
    	/**
    	 * Autorise (ou non) le groupe courant sur la ressource spécifiée
    	 * @param mixed $ressources Tableau de ressources ou ressource seule
    	 * @param boolean $isAllowed Autorise ou non accès à la ressources
    	 * @return void
    	 */
    	public function allowGroup($ressources,$isAllowed)
    	{
    		if(is_array($ressources))
    		{
    			foreach($ressources as $ressource)
    				$this->groupRessources[$ressource] = $isAllowed;
    		}
    		else
    		{
    			$this->groupRessources[$ressources] = $isAllowed;
    		}
    	}
     
    	/**
    	 * Autorise (ou non) l'utilisateur courant sur la ressource spécifiée
    	 * @param mixed $ressources Tableau de ressources ou ressource seule
    	 * @param boolean $isAllowed Autorise ou non accès à la ressources
    	 * @return void
    	 */
    	public function allowUser($ressources,$isAllowed)
    	{
    		if(is_array($ressources))
    		{
    			foreach($ressources as $ressource)
    				$this->userRessources[$ressource] = $isAllowed;
    		}
    		else
    		{
    			$this->userRessources[$ressources] = $isAllowed;
    		}
    	}
     
    	/**
    	 * Vérifie si l'accès à la ressource est autorisé.
    	 * Un accès est autorisé si le groupe et/ou l'utilisateur est autorisé
    	 * @param string $ressource Ressource à vérifier
    	 * @return boolean
    	 */
    	public function isAllowed($ressource)
    	{
    		if($this->isGod)
    			return true;
    		if(isset($this->groupRessources[$ressource]))
    		{
    			if($this->groupRessources[$ressource])
    				return true;
    			elseif($this->groupRessources[$ressource] | $this->userRessources[$ressource])
    				return true;
    			else
    				return false;
    		}
    		else
    		{
    			throw new Util_ExceptionHandler('Ressource inconnue : '.$ressource.'<br />');
    		}
    	}
     
    	public function __sleep()
    	{
    		return array('isGod','groupRessources','userRessources');
    	}
    }
    Une fois les ressource chargée il ne me reste plus qu'a tester les droits quand j'en ai besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($ACL->isAllowed('supprimer_message')
    	echo 'OK';
    else
    	echo 'PAS OK';
    Ma question est donc qu'en pensez vous ? Comment gérer vous les différents droits sur vos sites ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 547
    Par défaut
    Je ne l'ai pas encore utilisée mais tu peus peut-être regarder du coté de Zend ACL

    http://framework.zend.com/manual/fr/zend.acl.html

  3. #3
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Je conseillerais de voir Zend comme dis plus haut.

    Sinon un jour j'avais développé un système identique au système UNIX (tu sais '-rw-r--r--', 'drwxr-xr-x'...). Mais au niveau des tables j'avais pareil que toi, après c'est juste la façon de lire et écrire les droits qui diffère. Sinon, dans la logique, c'est pareil. C'est d'ailleurs tellement courant qu'il y a des modules pour gérer çà ^^.

Discussions similaires

  1. [SBI] Gestion des droits utilisateurs
    Par booobdez dans le forum SpagoBI
    Réponses: 6
    Dernier message: 11/06/2009, 12h00
  2. gestion des droits utilisateurs
    Par c-top dans le forum Administration système
    Réponses: 9
    Dernier message: 03/05/2009, 23h03
  3. [BO 5.1.8] Renseignements gestion des droits utilisateurs
    Par ninou58 dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 17/07/2008, 23h24
  4. gestion des droits utilisateurs par vba
    Par laurent.w dans le forum Sécurité
    Réponses: 14
    Dernier message: 17/01/2007, 09h09
  5. gestion des droits utilisateurs struts
    Par ijklm dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/05/2006, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo