Bonjour à tous

J'utilise la partie Security de Symfony pour gérer l'authentification de mes utilisateurs http://symfony.com/doc/current/book/security.html

Je n'utilise pas le FOSUserBundle car seule l'utilisation des rôles m'intéresse dans mon applis et d'après la doc c'est faisable.

Mes users sont stocker dans une base de donnée dans l'entité Personnel.

J'ai suivi la doc et j'ai d'abbord essayé avec 2 utilisateurs créer en dure dans security.yml... Et ça marche.

Comme j'ai plus de 2 utilisateurs, je voulais me servir d'une base de données et c'est là que les problèmes commencent

A chaque fois que je me connecte, j'ai le message d'erreur suivant : <gras>The presented password is invalid.</gras>. Il est devenu impossible de se connecter

Voici mon code


le code security.yml

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
 
security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
 
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
 
    providers:
        main:
            entity: { class: Dosicalu\PedagicielBundle\Entity\Personnel, property: idPersonne }
 #       in_memory:
 #           users:
 #               minus:  { password: minus, roles: 'ROLE_USER' }
 #               cortex: { password: cortex, roles: 'ROLE_ADMIN' }
 
    encoders:
        Dosicalu\PedagicielBundle\Entity\Personnel: sha1
 
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
 
        login:
            pattern:  /connexion$
            security: false
 
        secured_area:
            pattern:    ^/
            form_login:
                check_path: /login_check
                login_path: /connexion
            logout:
                path:   /demo/secured/logout
                target: /demo/
            #anonymous: ~
            http_basic:
                realm: "Secured Demo Area"
 
    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/, roles: ROLE_USER }
        #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
        #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
et voici le code de mon entité Personnel


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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
 
<?php
namespace Dosicalu\PedagicielBundle\Entity;
 
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
 
/**
 * @ORM\Entity
 * @ORM\Table(name="personnels")
 */
class Personnel implements UserInterface
{
    const ROLE_USER        = 'user';
    const ROLE_ADMIN       = 'admin';
    const ROLE_SUPERADMIN  = 'superadmin';
 
    /**
     * @ORM\Id
     * @ORM\Column(type="string", length="15")
     */
    protected $idPersonne;
 
    /**
     * @ORM\Column(type="string", length="50")
     */
    protected $password;
 
    /**
     * @ORM\Column(type="string", length="50")
     * @Assert\NotBlank()
     */
    protected $nom;
 
    /**
     * @ORM\Column(type="string", length="50")
     * @Assert\NotBlank()
     */
    protected $prenom;
 
    /**
     * @ORM\Column(type="string", length="60")
     * @Assert\Email()
     */
    protected $email;
 
    /**
     * @ORM\Column(type="string", length="100")
     */
    protected $ufr;
 
    /**
     * @ORM\Column(type="string", length="15")
     * @Assert\Choice(
     *     choices = { "user", "admin", "superadmin" },
     *     message = "Choisir un rôle valide."
     * )
     */
    protected $role;
 
    /**
     * @ORM\OneToMany(targetEntity="Demande", mappedBy="personnel")
     */
    protected $demande;
 
    /**
     * Set idPersonne
     *
     * @param string $idPersonne
     */
    public function setIdPersonne($idPersonne)
    {
        $this->idPersonne = $idPersonne;
    }
 
    /**
     * Get idPersonne
     *
     * @return string 
     */
    public function getIdPersonne()
    {
        return $this->idPersonne;
    }
 
    /**
     * Set nom
     *
     * @param string $nom
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    }
 
    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }
 
    /**
     * Set prenom
     *
     * @param string $prenom
     */
    public function setPrenom($prenom)
    {
        $this->prenom = $prenom;
    }
 
    /**
     * Get prenom
     *
     * @return string 
     */
    public function getPrenom()
    {
        return $this->prenom;
    }
 
    /**
     * Set email
     *
     * @param string $email
     */
    public function setEmail($email)
    {
        $this->email = $email;
    }
 
    /**
     * Get email
     *
     * @return string 
     */
    public function getEmail()
    {
        return $this->email;
    }
 
    /**
     * Set role
     *
     * @param string $role
     */
    public function setRole($role)
    {
        if (!in_array($role, array(self::ROLE_USER, self::ROLE_ADMIN, self::ROLE_SUPERADMIN))) {
            throw new \InvalidArgumentException('Role non valide');
        }        
 
        $this->role = $role;
    }
 
    /**
     * Get role
     *
     * @return string 
     */
    public function getRole()
    {
        return $this->role;
    }
 
    public function __construct()
    {
        $this->demande = new \Doctrine\Common\Collections\ArrayCollection();
    }
 
    /**
     * Add demande
     *
     * @param Dosicalu\PedagicielBundle\Entity\Demande $demande
     */
    public function addDemande(\Dosicalu\PedagicielBundle\Entity\Demande $demande)
    {
        $this->demande[] = $demande;
    }
 
    /**
     * Get demande
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getDemande()
    {
        return $this->demande;
    }
 
    /**
     * Set ufr
     *
     * @param string $ufr
     */
    public function setUfr($ufr)
    {
        $this->ufr = $ufr;
    }
 
    /**
     * Get ufr
     *
     * @return string 
     */
    public function getUfr()
    {
        return $this->ufr;
    }
 
    public function equals(\Symfony\Component\Security\Core\User\UserInterface $user){}
 
    public function eraseCredentials(){}
 
    public function getPassword(){
 
 
        return 'cortex';
}
 
    public function getSalt(){}
 
    public function getUsername(){}
 
    public function getRoles() {}
}

Est-ce que quelqu'un sait comment utiliser la partie Security de Symfony avec une base de donnée ?

D'avance merci pour vos retour d'expérience.