Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 17h07   #1
Invité régulier
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 7
Points : 7
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 :
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 :
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.
apprentiDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 14h07   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu peux mettre le shema des tables en question (shema.yml partiel) ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h28   #3
Invité régulier
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 7
Points : 7
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 :
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é.
apprentiDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h05.


 
 
 
 
Partenaires

Hébergement Web