Laravel 5

Policy inactive

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    Bonsoir,

    J'ai un soucis avec une policy pourtant toute simple et je ne trouve pas le soucis....

    Sur ma page d'accueil j'ai placé :

    @can('view', $forum)
    <tr>
    <td>{{ $forum->nom }} <br/> {{ $forum->description }}</td>
    <td>{{ $forum->nb_sujets }}</td>
    <td>{{ $forum->nb_messages }}</td>
    <td>
    @if($forum->Sujet != null)
    {{ $forum->Sujet['nom'] }} <br/> par
    {{ $forum->Sujet->Message->Personnage['nom'] }}
    @else
    Aucun message
    @endif
    </td>
    </tr>
    @endcan

    Et du côté de ma policy j'ai tout simplement placé un :

    public function view(Forum $forum)
    {
    return true;
    }

    Bien évidement ce n'est pas l'utilisation finale... mais même ça ne fonctionne pas T-T

    Ma variable forum contient bien un objet App\Model\Forum mais visiblement la policy renvoi false quoi que je fasse... une idée ?

    Bonne soriée et d'avance merci pour l'aide,

  • Avatar de ArnaudY
    Membre depuis :
    02/01/2020
    Messages :
    1

    Bonsoir,

    Si tu es en auto-discovery des policies, il faut respecter la règle de nommage Model+suffixe 'Policy', donc dans ton cas 'ForumPolicy'.
    Sinon tu peux enregistrer ta policy :
    Cf: https://laravel.com/docs/6.x/authorization#creating-policies

    Cdt,
  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    Bonsoir,

    Merci pour le coup de pouce, malheureusement ça ne change rien...

    J'ai bien inclus dans mon AuthServiceProvider le code :

    protected $policies = [
    Forum::class => ForumPolicy::class,
    ];

    Mais au niveau de ma vue, toujours rien ! J'ai remarqué une erreur grace à la debugbar, la section gate m'affiche 4 erreurs (1 pour chaque ittération de la boucle) avec systématiquement le même contenu :

    error
    array:4 [▼
    "ability" => "view"
    "result" => null
    "user" => null
    "arguments" => "[0 => Object(App\Model\Forum)]"
    ]

    C'est légérement désespérant ah ah..

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Salut,

    Il me semble qu'une méthode dans un policy doit avoir deux arguments dont le premier est le user.

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    Bonjour,

    J'ai testé l'ajout du paramètre user à la fonction view du policy... sans plus de succès...

    Toutefois je me pose une question... dans ma vue je fais :

    @can('view', $forum)

    Mais comment laravel sait quelle policy utiliser ? Est-ce lié au type d'objet envoyé ? Si j'ai deux policy différentes qui utilisent toutes les deux un argument de type ForumObj... qu'est-ce qui se passe ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Salut,

    Tu as défini dans ton provider le lien entre la classe Forum et ta policy, donc Laravel la trouve facilement. Evidemment ta variable $forum doit être une instance de cette classe.

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    En effet...

    Bon celà dis, ça n'explique pas pourquoi rien ne fonctionne...

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Je serais quand même curieux de voir ce qui arrive dans la méthode :

    public function view(User $user, Forum $forum)
    {
    dd($user); // et aussi dd($forum);
    return true;
    }
  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    Aloors... j'ai une bonne et une mauvaise nouvelle...

    La bonne nouvelle c'est que lorsqu'un utilisateur est connecté, la policy est bien appliquée !

    La mauvaise nouvelle, c'est qu'elle est censée fonctionner également si l'utilisateur n'est pas connecté...

    Le soucis c'est qu'avec le système actuel la policy renvoi automatiquement false si l'utilisateur n'est pas connecté...

    -_-'

    Du coup... une alternative ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Regarde ici.

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    21

    Super, merci beaucoup pour votre aide !

    Dernière question après je ne vous embête plus :D

    Lorsque la policy retourne false, c'est considéré comme une erreur par la debugbar... normal ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Elle ne devrait pas considérer ça comme une erreur.

Vous ne pouvez pas répondre à ce sujet.