IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Interdire l’accès a l'user connecté si celui-ci a le même id que la var du controller dans l'annotation


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Interdire l’accès a l'user connecté si celui-ci a le même id que la var du controller dans l'annotation
    Bonjour,

    Voila je fais actuellement une messagerie interne, tout va bien et j'ai quasi terminé ! sauf que je ne souhaite pas que l'utilisateur actuellement connecté puisse s'envoyer des messages a lui même

    Savez vous comment faire ? Je pense que Symfony a une solution "prêt a l'emploi" il me semble non ? Je ne trouve rien pour le moment dans la doc. La vérif à faire est que si le user connecté possède le même id que la var de mon controller plus bas, alors il s'agit du même membre.

    Voici mon Controller
    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
     
        /**
         * @Route("/conversations/{id}", name="conversations_show", methods={"GET","POST"})
         */
        public function show(Request $request, User $user, MessageRepository $repo): Response
        {
            $message = new Message();
            $message->setCreatedAt(new \DateTime("now"));
            $message->setUserFrom($this->getUser());
            $message->setUserTo($user);
     
            $form = $this->createForm(MessageType::class, $message);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($message);
                $entityManager->flush();
     
                return $this->redirectToRoute('conversations_show', [
                    'id' => $user->getId(),
                ]);
            }
     
            return $this->render('conversations/show.html.twig', [
                'user' => $user,
                'form' => $form->createView(),
                'messages' => $repo->getMessagesFor($this->getUser()->getId(), $user->getId())
            ]);
        }
    Je vous remercie

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Salut,

    Si c'est un champ de formulaire qui permet de définir le "UserTo", peut-être qu'une contrainte de validation customisée ferait l'affaire ? (ça demande un peu de développement)

    La page de la doc qui en parle : https://symfony.com/doc/current/vali...onstraint.html

    Notamment ce passage :
    If you're using the default services.yaml configuration, then your validator is already registered as a service and tagged with the necessary validator.constraint_validator. This means you can inject services or configuration like any other service.
    Je pense qu'avec ça, tu pourras injecter le service Security pour vérifier, via ta contrainte de validation, que l'utilisateur connecté est bien différent du "UserTo".
    Ça ne change pas ton contrôleur (un simple message d'erreur à afficher si le formulaire n'est pas valide) et une fois développée, il suffit d'ajouter ton annotation custom dans ton entité Message sur l'attribut "UserTo" (comme n'importe quelle autre contrainte de validation).

  3. #3
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Il y a sûrement moyen en fouillant, mais vu la simplicité de ton code pourquoi ne mets-tu pas simplement une condition au début ?

  4. #4
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par _Thomas Voir le message
    Si c'est un champ de formulaire qui permet de définir le "UserTo", peut-être qu'une contrainte de validation customisée ferait l'affaire ? (ça demande un peu de développement)
    _Thomas : mon formulaire contient uniquement un champ "content" pour le message, les autres champs comme userFrom, userTo, createdAt, readAt sont remplis automatiquement par le controller.

    au passage merci pour l'autre post parfois je fatigue !

    Citation Envoyé par Sodium Voir le message
    Il y a sûrement moyen en fouillant, mais vu la simplicité de ton code pourquoi ne mets-tu pas simplement une condition au début ?
    Sodium : Je peux très facilement mais je ne veux pas, dans la mesure du possible je préfère utiliser une annotation grâce à la liasse Assert par exemple.. plus léger dans le code. Je suis perfectionniste

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    À mon avis tu peux belle et bien utiliser une contrainte de validation custom même si ce n'est pas un champ de formulaire, la documentation dit :
    The Validator is designed to validate objects against constraints.
    Mais a priori si c'est le contrôleur qui définit "UserTo", est-ce qu'il y a vraiment un cas possible où un utilisateur peut s'envoyer un message à lui même ?

  6. #6
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    salut, oui c'est possible mais je vais déjà voir si le Assert ne peut pas faire le boulot (plus léger en code..) il me semble bien qu'une solution existe

    non le contrôleur récupère le userTo grâce à la variable GET.

    exemple : /conversations/12

    cette url désigne que l'utilisateur connecté parle avec le membre 12 et le contrôleur passe le 12 en userTo (comme dans l'exemple vidéo pour laravel)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Ok ok, dans ce cas effectivement la vérification est pertinente, bon courage !

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Je me permets de "relancer" le sujet, je viens de (re)découvrir les contraintes de type "callback" et je me suis dit que ça pourrait peut-être t'intéresser de résoudre ton problème sans t'imposer la création d'une contrainte custom (tout en restant dans l'esprit de la validation) : https://symfony.com/doc/current/refe.../Callback.html

    Voilà voilà...

    [EDIT] En fait j'ai parlé trop vite :
    To validate using a service, you should create a custom validation constraint and add that new constraint to your class.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2006, 20h28
  2. les users connectés à une base oracle
    Par progima dans le forum Oracle
    Réponses: 8
    Dernier message: 08/11/2005, 18h43
  3. liste des users connectés à une base acces
    Par progima dans le forum Access
    Réponses: 2
    Dernier message: 07/11/2005, 17h45
  4. Nbre de users connectés à une base
    Par yanis97 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo