Bonsoir,
Voila je rencontre un petit problème avec mon code.
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.
public function view(User $user, Ticket $ticket)
{
return $user->id === $ticket->user_id;
}
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
.
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
!
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 :
public function show($id)
{
$ticket = Ticket::find($id);
$this->authorize('view', $ticket);
if ($ticket && request()->expectsJson()) {
return response()->json(new TicketResource($ticket), Response::HTTP_OK);
} elseif (!$ticket && request()->expectsJson()) {
return response()->json([Output::MESSAGE => Output::RESOURCE_NOT_FOUND], Response::HTTP_NOT_FOUND);
} elseif ($ticket && !request()->expectsJson()) {
return view('tickets.show', compact('ticket'));
}
return abort(404);
}
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);
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 ?
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 !
On est bien d'accord c'est ça :
protected $policies = [
Ticket::class => TicketPolicy::class
];