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

Symfony PHP Discussion :

symfony gestion des utilisateurs [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut symfony gestion des utilisateurs
    Bonjour,

    Avant de montrer les lignes de code une petite explication du contexte
    J'utilise symfony 1.4 avec le plugin sfGuard
    Un module de gestion des utilisateurs à été crée.

    Dans le formulaire de gestion des utilisateurs deux champs sont modifiables is_admin et photo_ok qui modifie deux tables différentes ( agent et sfGuard)

    Je dois géré les cas suivants :
    1. Un utilisateur n'est pas admin et le devient ( enregistrement dans la table sfGuardUser et sfGuardUserGroup)
    2. Un adminstrateur est déchu de ses droits ( effacement dans la table sfGuardUserGroupe mais reste dans sfGuardUser)
    3. Un utilisateur déja enregistré dans sfGuard devient admin ( déjà dans SfGuard mais pas SfGuardUserGroup)
    4. Un administrateur ne veut pas que sa photo soit visible ( déjà enregistré dans SfGuardUser)


    Voici le code que j'ai fait
    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
    protected function save(Doctrine_Connection $conn = null)
    	{
     
         	// test existance de l'utisateur dans sfguarduser 
     
    		$query = Doctrine_Query::create()
    				  ->select('*')
    				  ->from('sfGuardUser')
    				  ->where('username = ?', $this->getMatricule());
      		$user = $query->fetchOne();	
    	
    		if (!$user && $this->getIsAdmin() == TRUE)
    		{	
    			// Si l'utilisateur n existe pas dans sfGuardUseur on le creer
    			$user = new sfGuardUser(); 
    			$user->setUsername($this->getMatricule());
    			$user->setAlgorithm("sha1");
    			$user->setIsActive(true);
    			$user->setIsSuperAdmin(false);
    			$user->save();
    			
    			//puis on ajoute le groupe admin de l'utilisateur  dans sfGuardUseurGroup
    			$groupe = new sfGuardUserGroup();
    			$groupe->setUserId($user->id); 
    			$groupe->setGroupId(1); 
    			$groupe->save();
    		}
    		else 
    		{	
    	    	// Si l'utilisateur est deja dans la table sfGuardUseur
    	   		 
    			if ($this->getIsAdmin() == FALSE )
    			{
    // si la case is_admin est décrochée suppression de l'utilisateur dans le groupe admin
    	    		$q = Doctrine_Query::create()
    		    	->delete('sfGuardUserGroup u')
    		    	->where('u.user_id = ?', $user->id);
    				$q->execute();
    				
    			}
    			if ($this->getIsAdmin() == TRUE )
    			{
    			
    				// permet de gerer le cas ou un utilisateur admin  
    				//veut changer le choix de le case photo  
    				
    				$query = Doctrine_Query::create()
    				  ->select('*')
    				  ->from('agent')
    				  ->where('matricule = ?', $this->getMatricule());
      				$user = $query->fetchOne();	
    
    			if($user->getPhotoOk() != $this->photo_ok)
    					{
    						$user->setPhotoOk($this->photo_ok);
    						$user->save();
    						exit();
    					}
    				
    				// si l'utilisateur n'est pas dans le groupe admin mais deja present 
    				//dans la table sfguard ajout de l'utilisateur dans le groupe admin
    				$groupe = new sfGuardUserGroup();
    				$groupe->setUserId($user->id); 
    				$groupe->setGroupId(1); 
    				$groupe->save();
    			}
    	    	return parent::save($conn);
    		}
    Le bout de code en rouge correspond au cas que je n'arrive pas à gérer.
    Comme l'admin est déjà enregistré dans sfUser j'obtiens l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[23505]: Unique violation: 7 ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « sf_guard_user_group_pkey »
    J'ai essayé de faire des updates mais l'erreur est identique ( me semble t-il car j'ai fait plusieurs tests )

    Je bloque

    En vous remerciant d'avance de vos réponses.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu peux mettre le shema des tables en question (shema.yml partiel) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Tout d'abord désolé pour ma réponse tardive.

    Concernant le problème que je décrivais (un admin doit pouvoir modifier son choix de visibilité de photo) Le but de mon code était de modifier le save du champ is_admin mais je me retrouvais bloquer car je devais géré un second bouton (photo_ok) en même temps

    Je l'ai résolu en testant si l'admin était présent dans les tables sfGuardUser et sfGuardUser_group via les id.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = Doctrine_Query::create() 
              ->select('*') 
     	  ->from('sfGuardUser,sfGuardUserGroup ') 
              ->where('username = ?', $this->getMatricule()) 
              ->andWhere('id = user_id'); 
     	    $permission = $query->fetchOne();
    Ensuite si c'est bien le cas pour contourner le problème de l'update que je n'arrivais à faire j'ai tester le $permission.
    Dans un cas positif je ne modifie rien car je n'ai en fait qu'un groupe donc pas besoin d'update. Dans un cas négatif je vais un new.

    J'ai pu faire comme ça grâce à une des FAQ du forum traitant de sfGuard.
    Désolé Michel Rotta pour le dérangement occasionné.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/05/2005, 18h18
  2. [Oracle]probleme de gestion des utilisateurs
    Par gentarik dans le forum Oracle
    Réponses: 5
    Dernier message: 09/03/2005, 12h58
  3. [Gestion des utilisateurs] Changer l'interface simplifiée
    Par sekiryou dans le forum Windows XP
    Réponses: 4
    Dernier message: 19/01/2005, 05h42
  4. Administration MySQL gestion des utilisateurs
    Par MaxiMax dans le forum Administration
    Réponses: 2
    Dernier message: 01/07/2004, 13h56
  5. Gestion des Utilisateurs depuis une application
    Par LLaurent dans le forum XMLRAD
    Réponses: 4
    Dernier message: 25/03/2003, 16h29

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