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 05/04/2011, 14h25   #1
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
Par défaut Redirection dans un template

Bonjour,
J'aurais besoin de faire une redirection dans un template. Je sais que c'est contraire aux principes de symfony, mais c'est une des seules manière qu'il me reste.

Je veux interdire l'acces à des modules de mon application dans certains cas ( utilisateur expiré ou désactivé ).
J'avais pensé aux credentials pour gérer cela mais je n'arrive pas à les faire fonctionner.

Voici mon fichier security.yml pour l'un des modules que je souhaite restreindre :
Code :
1
2
3
4
5
all:
  credentials: non-expired
 
default:
  credentials: non-expired
insane1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 09h19   #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
Les crédentials permettent de valider l'accès, pas de l'interdire. Donc plutôt que d'utiliser un credential : expired il conviendra d'en utiliser un valid_user.

Ce qui, par le retrait du crédential aux utilisateurs concerné, permetra de leur interdir l'accès à différents modules.

La réaction dépendra un peu de ton environnement, notamment de l'utilisation (ou non) de sfGuard.

En cas d'absence de credential et de déclaration faîtes dans le view.yml de chaque module (ou globalement) les utilisateurs sont renvoyé vers une url précisé dans le setting.yml par les paramètres :
Code :
1
2
3
4
5
6
7
8
# setting.yml
all:
  .settings:
    login_module:           sfGuardAuth
    login_action:           signin
 
    secure_module:          sfGuardAuth
    secure_action:          secure
A noter que ce sont ici les paramètres par défaut de sfGuard. Ils peuvent être modifié à loisir et pointer vers le module qui traitera l'erreur (un module de payement par exemple). Attention, ce module, lui, devra être accessible aux utilisateurs (pas de sécurité dessus) pour éviter "la boucle de la mort".

Tu peux aussi modifier ton myUser et y rajouter une méthode qui retourne vrai si l'utilisateur est actif. Dans ce cas, soit action par action dans ton contrôleur, soit par la méthode preExecute() qui est exécuter avant toutes autres action dans ce contrôleur. L'utilisation d'un redirect ou d'un forward (ou mieux d'un forwardUntil() ) permettre de rediriger l'utilisateur vers le module de traitement.

Attention, tu dis : "de faire une redirection dans un template" pour moi, en symfony, cela signifie que tu traites le contrôleur et qu'à la fin de son exécution tu rediriges vers un autre template, ce qui me semble une très mauvaise idée. Il vaut mieux rediriger en début de traitement de l'action vers une autre action (et son template).
__________________
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 10
Vieux 06/04/2011, 09h47   #3
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
Citation:
Ce qui, par le retrait du crédential aux utilisateurs concerné, permettra de leur interdire l'accès à différents modules.
Oui c'est ce que je fais, les utilisateurs qui ne peuvent pas accéder au module n'ont pas le credential en question. Cependant, ils peuvent tout de même accéder au module...

Peux tu m'éclairer un peu sur la méthode preExecute() ? Comment l'implémenter ? Merci.
insane1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 10h27   #4
Membre confirmé
 
Inscription : février 2009
Messages : 317
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 317
Points : 209
Points : 209
J'ai réussi à faire ce que je voulais avec preExecute.
Merci Michel pour l'infos
insane1 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 01h50.


 
 
 
 
Partenaires

Hébergement Web