Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Le système des credentials de symfony est simple et puissant. Un credential est une chaîne qui peut représenter tout ce dont vous avez besoin pour décrire le modèle de sécurité des applications (comme des groupes ou des autorisations).
sauf qu' en utilisant comme exemple le mot admin au niveau du group et des permissions dans les exemples du type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
all:
  is_secure:   true
  credentials: admin
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
index:
  credentials: [A, B]
on se sait pas si il cause des groups ou des permissions.

Après 2 jours de prise de tête en pensant que le niveau 1 était le group et que l'on pouvait paufiner avec un niveau 2 en utilisant les permissions j'ai l'impression que c'est le contraire:

mon schéma du plugin sfGuardUser:
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
 
sfGuardGroup:
  actAs: [Timestampable]
  columns:
    name:
      type: string(255)
      unique: true
    description: string(1000)
  relations:
    Users:
      class: sfGuardUser
      refClass: sfGuardUserGroup
      local: group_id
      foreign: user_id
      foreignAlias: Groups
    Permissions:
      class: sfGuardPermission
      local: group_id
      foreign: permission_id
      refClass: sfGuardGroupPermission
      foreignAlias: Groups
 
sfGuardPermission:
  actAs: [Timestampable]
  columns:
    name:
      type: string(255)
      unique: true
    description: string(1000)
 
sfGuardGroupPermission:
  options:
    symfony:
      form:   false
      filter: false
  actAs: [Timestampable]
  columns:
    group_id:
      type: integer
      primary: true
    permission_id:
      type: integer
      primary: true
  relations:
    Group:
      class: sfGuardGroup
      local: group_id
      onDelete: CASCADE
    Permission:
      class: sfGuardPermission
      local: permission_id
      onDelete: CASCADE
 
sfGuardUser:
  actAs: [Timestampable]
  columns:
    first_name: string(255)
    last_name: string(255)
    email_address:
      type: string(255)
      notnull: true
      unique: true
    username:
      type: string(128)
      notnull: true
      unique: true
    algorithm:
      type: string(128)
      default: sha1
      notnull: true
    salt: string(128)
    password: string(128)
    is_active:
      type: boolean
      default: 1
    is_super_admin:
      type: boolean
      default: false
    last_login:
      type: timestamp
    matricule:
      type: integer
      unique: true
    site_id: { type: integer } 
  indexes:
    is_active_idx:
      fields: [is_active]
  relations:
    Groups:
      class: sfGuardGroup
      local: user_id
      foreign: group_id
      refClass: sfGuardUserGroup
      foreignAlias: Users
    Permissions:
      class: sfGuardPermission
      local: user_id
      foreign: permission_id
      refClass: sfGuardUserPermission
      foreignAlias: Users
    Site:
      local: site_id
      foreign: id
 
sfGuardUserPermission:
  options:
    symfony:
      form:   false
      filter: false
  actAs: [Timestampable]
  columns:
    user_id:
      type: integer
      primary: true
    permission_id:
      type: integer
      primary: true
  relations:
    User:
      class: sfGuardUser
      local: user_id
      onDelete: CASCADE
    Permission:
      class: sfGuardPermission
      local: permission_id
      onDelete: CASCADE
 
sfGuardUserGroup:
  options:
    symfony:
      form:   false
      filter: false
  actAs: [Timestampable]
  columns:
    user_id:
      type: integer
      primary: true
    group_id:
      type: integer
      primary: true
  relations:
    User:
      class: sfGuardUser
      local: user_id
      onDelete: CASCADE
    Group:
      class: sfGuardGroup
      local: group_id
      onDelete: CASCADE
 
sfGuardRememberKey:
  options:
    symfony:
      form:   false
      filter: false
  actAs: [Timestampable]
  columns:
    user_id: integer
    remember_key: string(32)
    ip_address: string(50)
  relations:
    User:
      class: sfGuardUser
      local: user_id
      foreignAlias: RememberKeys
      foreignType: one
      onDelete: CASCADE
 
sfGuardForgotPassword:
  options:
    symfony:
      form:   false
      filter: false
  actAs: [Timestampable]
  columns:
    user_id:
      type: integer
      notnull: true
    unique_key: string(255)
    expires_at:
      type: timestamp
      notnull: true
  relations:
    User:
      class: sfGuardUser
      local: user_id
      type: one
      foreignType: one
      foreignAlias: ForgotPassword
      onDelete: CASCADE
:
le schéma de mon appli:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
article:
  columns:
    name: string(50)
 
Site:
  connection: doctrine
  tableName: site
  columns:
    name:
      type: string(50)
      unique: true
    description:
      type: string(255)
mes fixtures:
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
 
sfGuardUser:
  User_admin:
    first_name:     John
    last_name:      Doe
    email_address:  john.doe@gmail.com
    username:       admin
    password:       admin
    is_super_admin: true
    Site: S01
    Groups:         [Group_admin]
  User_test:
    first_name:     test
    last_name:      test
    email_address:  test@gmail.com
    username:       test
    password:       test
    is_active:      true
    Site:           S01
    Groups:         [Group_Correspondant]
    Permissions:    [Permission_Correspondant]
  User_test1:
    first_name:     test1
    last_name:      test1
    email_address:  test1@gmail.com
    username:       test1
    password:       test
    is_active:      true
    Site:           S01
    Groups:         [Group_Correspondant]
    Permissions:    [Permission_Correspondant1]
 
sfGuardGroup:
  Group_admin:
    name:           admin
    description:    Administrator group
    Permissions:    [Permission_admin]
  Group_Correspondant:
    name:           Correspondant
    description:    Correspondant group
    Permissions:    [Permission_admin]
 
sfGuardPermission:
  Permission_admin:
    name:           admin
    description:    Administrator permission
  Permission_Correspondant:
    name:           Perm_Correspondant
    description:    Correspondant permission
  Permission_Correspondant1:
    name:           Perm_Correspondant1
    description:    Correspondant permission
j'ai juste créer un module frontend/article dans lequel j'ai mis un fichier config/security.yml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
default:
  is_secure: false
  credentials: [Perm_Correspondant]
=> me demande aucune identification et m'affiche la page index
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
default:
  is_secure: true
  credentials: [Correspondant]   # qui est le nom du group
=> me demande une autorisation mais bloque car je n'ai pas les bons acces

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
default:
  is_secure: true
  credentials: [Perm_Correspondant]  # qui est le nom de la permission
me demande une autorisation et valide l'accés si le user a cette permission.

Ma (mes questions) est:
- est ce qu'il existe un tuto sur ce sujet un peu plus fouillé que la doc symfony.
- a quoi serve les groups puisqu'il semblerait que seul les permissions soit utiles ?

ou bien le principe est d'affecter dans les fichiers security les permissions et de gerer les user par group, group qui cumule des permissions ?

j'ai l'impression d'avoir répondu a mon probléme la :/