CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Symfony 2 et form, relation bizarre

return_returns
return_returns
Niveau 6
29 octobre 2014 à 19:39:59

Bonjour :hap:

J'ai un problème que j'arrive pas à résoudre avec Symfony 2, en utilisant Doctrine.

J'ai une table user, une table droit, et une table site

Un user n'a pas accès à tous les sites, et pour ces sites il a différents droits différents selon les sites

Par exemple, dans une base où il y a 3 sites un utilisateur pourra avoir un accès comme ça :

site A :
- droit utilisateur
- droit admin

site B :
- droit utilisateur

site c :
- aucun droit

Pour schématiser ça au niveau de la base, j'ai fait une table pour relier ces 3 entitées qui s'appelle user_site_droit, qui possède l'id d'un user, l'id d'un droit, et l'id d'un site.

De cette manière on peut affecter un utilisateur à un site en lui donnant des droits, et s'il a plusieurs droit on rajoute une ligne avec le même id d'user et le même id de site mais des droits différents par exemple.

Jusque là, pas de soucis

Mais alors après avec symfony 2 j'arrive à rien, j'ai aucune idée de comment m'y prendre pour éditer ça :mort:

Dans l'idéal j'aimerai, lorsque j'édite mon utilisateur, pouvoir avoir la liste de tous les sites, et cocher ses droits pour chacun des sites.

J'ai vraiment aucune idée de comment faire ça avec des objets Form de symfony 2 ?

J'ai généré un form avec mon utilisateur du coup je peux éditer son nom etc
mais comment j'édite ce formulaire pour avoir des cases à cocher pour chaque site ?

pour reprendre l'exemple plus haut, dans mon interface d'admin il ce serait coché du genre :

site A :
☒ droit utilisateur
☒ droit admin

site B :
☒ droit utilisateur
☐ droit admin

site c :
☐ droit utilisateur
☐ droit admin

Vous pensez que c'est possible à faire en symfony ?
Est-ce que c'est la structure de ma base de données qui pause soucis ?

Je galère là dessus depuis des jours et je m'en sors pas :mort:

Pour du PHP classique j'aurais fait une requête qui prend tous les sites, puis une requête qui prend tous les droits et qui les balance dans une boucle et j'aurais fait le formulaire à la main, mais bon j'ai vraiment envie de faire un truc propre et d'apprendre à le faire en symfony mais j'y arrive pas, j'ai presque l'impression que c'est impossible à faire :-(

:merci:

deepblue
deepblue
Niveau 16
29 octobre 2014 à 20:21:08

C'est une collection de permissions dans une collection de sites.

Je fais un bout de code et je reviens.

deepblue
deepblue
Niveau 16
29 octobre 2014 à 20:24:14

Avant de revenir :
1. Même si tu penses Doctrine, pour code pourra avoir un raisonnement différent, proche de celui de Propel (que j'utilise dans tous les projets sf2)

2. La persistance sera à personnaliser pour Doctrine car je ne sais pas comment ça fonctionne.

3. Tu as tes droits gérés dans une table ?

return_returns
return_returns
Niveau 6
29 octobre 2014 à 20:28:26

Merci pour la réponse, du code ce serait super sympa, pas de soucis si c'est du propel je pense pouvoir adapter

"3. Tu as tes droits gérés dans une table ?"
oui, les différents droits sont dans une table à part mais on peut dire que tous les sites ont les mêmes intitulés de droits (pas de droits admin2 qui n'existerait uniquement que pour un site)

merci :oui:

deepblue
deepblue
Niveau 16
29 octobre 2014 à 20:30:26

Je ne ferais pas de Propel, mais pas de Doctrine non plus.

Laisse moi quelques minutes :-)

deepblue
deepblue
Niveau 16
29 octobre 2014 à 22:15:57

Le contrôleur : https://wall.deblan.org/x1c25/php/1/FooController

Le formulaire qui édite l'utilisateur : https://wall.deblan.org/x1c26/php/1/
Le formulaire qui édite les permissions d'un site : https://wall.deblan.org/x1c27/php/1/

Models :
- Permission : https://wall.deblan.org/x1c28/php/1/
- PermissionQuery : https://wall.deblan.org/x1c29/php/1/
- Site : https://wall.deblan.org/x1c2a/php/1/
- SiteQuery : https://wall.deblan.org/x1c2b/php/1/
- User : https://wall.deblan.org/x1c2c/php/1/
- UserHasSite : https://wall.deblan.org/x1c2d/php/1/

Dans ton mapping :
- Permission : une entrée de ta table de permissions
- Site : une entrée de ta table de sites
- User : une entrée de ta table de users
- UserHasSite : une entrée de la table d'assoc user/site/permissions
- Les *Query sont des magasins de models (je ne sais pas comment c'est modélisé chez Doctrine)

Enfin, la vue : https://wall.deblan.org/x1c2e/html/1/

Pour une aide sur l'arbo : https://upload.deblan.org/u/2014-10/545157d7.jpg (j'ai installé une distro sf2 donc y'a du bordel en plus de ton code)

Tu verras que j'ai simulé un user dans le contrôleur, avec déjà quelques permissions.
La tronche du formulaire avant sa validation : https://upload.deblan.org/u/2014-10/54515820.png
...et en ayant ajouté quelques permissions, voici ce que le user à comme permissions post validation (cf le processForm) : https://upload.deblan.org/u/2014-10/5451588b.png

Ce n'est peut-être pas la façon idéale pour réaliser ce que tu veux, d'autant plus que je n'ai pas l'habitude de traiter ça en dehors de Propel. Le choice du formulaire UserHasSite devrait correspondre au type entity pour Doctrine.

J'espère que ça pourra t'aider :ok:

deepblue
deepblue
Niveau 16
29 octobre 2014 à 22:21:34

Notes :
- il faudrait changer le getName dans le UserHasSiteType
- quand tu persistes ton user, tu conserve pas les UserHasSite sans permission

return_returns
return_returns
Niveau 6
29 octobre 2014 à 22:43:06

Franchement merci milles fois, c'est super sympa et j'aurais jamais réussi tout seul, tu me sauve la vie :snif: ça répond exactement à ma problématique

J'avais tenté de faire un espèce de UserHasSite mais sans faire une collection de permissions ou de choses de ce genre du coup c'était ultra galère, je pensais trop façon "bdd" pure

là du coup ça me semble vraiment plus clair

Demain matin je test ça de mon côté mais pas de raison que je rencontre de soucis :oui:

J'en attendais franchement pas tant, vraiment merci!!

ça me montre que j'ai encore beaucoup à apprendre parce que franchement je galèrerais la dessus depuis presque une semaine et je m'en sortais pas et toi en deux-deux tu gères le truc :rire:

encore merci pour ton aide

:merci:

deepblue
deepblue
Niveau 16
29 octobre 2014 à 23:21:37

De rien :-)

Je fais du symfony tous les jours, ça aide :p)

return_returns
return_returns
Niveau 6
30 octobre 2014 à 17:23:53

"Je fais du symfony tous les jours, ça aide :p)"
:d) moi aussi depuis une ou deux semaines :bave: C'est le premier vrai gros problème que je rencontre, j'avais eu aussi 2/3 soucis pour un site multi-langues mais j'ai réussi à m'en dépatouiller et je crois que symfony 2.6 améliorera deux ou trois trucs là dessus

Enfin, ça y est je viens de réussir :content:

Sans ton code j'aurais vraiment jamais réussi, j'ai galéré toute la journée à le faire :rire:

Bon heureusement quand même que le reste de mon projet c'est des relations plus classiques, parce que là c'était mortel :peur:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment