Salut !
Quand tu dis retourne 4 et "4", est ce que tu as d'un coté une chaine de caractère et de l'autre un entier ?
Bonsoir,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
Je souhaite autoriser des actions (ou en refuser) à l'aide des "Policies" de Laravel. Je créer une "Policy" appelée "TicketPolicy", et je défini la méthode view() qui permet de vérifier qui à le droit de voir une ressource.
Logiquement, avec cette méthode, si l'id de l'utilisateur actuellement connecté est équivalent à la colonne user_id de ma table tickets cela retourne true.
Ce que je veux
Je souhaite que l'utilisateur qui a créé le ticket (et celui qui est actuellement connecté) puisse voir son ticket et non qu'il tombe sur une action unauthorized !
Ce que j'obtiens
Lorsque j'appelle la méthode authorize() dans la méthode show() de mon controller, l'action n'est pas authorisée alors que j'ai bien pris la précotion de voir un ticket qui a été créé par l'utilisateur actuellement connecté car dd(auth()->id(), $ticket->user_id); retourne 4 et "4"
La déclaration dans le controller :
14 réponses
yo, si tu mets seulement "==" et pas "===" il se passe quoi? connais tu la différence entre les 2 ? car ton message laisse supposé que un 4 est de type string .
++
En effet les '==' et '===' vérifie tout les deux l'égalité, par contre les '===' vérifie également l'égalité du type, donc si tu as un entier et un string, c'est pas égal par conséquent tu n'auras pas le droit de voir ton ticket :)
Bonjour ! Merci pour vos réponses mais c'est une erreur de ma part d'avoir mis le triple égal ! Après avoir modifié par un double égal, je ne parviens toujours par à voir le ticket en question !
Si tu commente la ligne $this->authorize, ca fonctionne ?
Effectivement oui, j'arrive à y accéder !
Dans ta policie remplace '$user->id' par 'Auth::user()->id'
Cela ne fonctionne toujours pas...
Au cas ou, tu as bien renseigner ta policy dans le AuthServiceProvider ?
Oui oui, sinon l'erreur action unauthorized ne s'afficherait pas
Aah au temps pour moi :p
On est bien d'accord c'est ça :
Oui c'est ça.
Lorsque la fonction authorize est appelée, il faut lui passer le modèle en second paramètre ! Dans mon cas : authorize('view', Ticket::class);