Laravel 5

Policies non exécutées

  • Avatar de KYoann
    Membre depuis :
    11/02/2019
    Messages :
    37

    Je n'arrive pas à faire en sorte que mes policies soient prises en compte. Quand j'utilise le débugger étape par étape de mon IDE, je vois bien qu'elles sont simplement pas excécuté mais l'accès est tout de même systématiquement refusé.

    Le fichier AuthServiceProvider.php

    protected $policies = [
    'App\Model' => 'App\Policies\ModelPolicy',
    Options::class => OptionsPolicy::class,
    Etablissement::class => EtablissementPolicy::class,
    ];

    La policy EtablissementPolicy.php

    <?php

    namespace App\Policies;

    use App\User;
    use App\Etablissement;
    use Illuminate\Auth\Access\HandlesAuthorization;

    class EtablissementPolicy
    {
    use HandlesAuthorization;

    /
    Determine whether the user can view the etablissement.

    @param \App\User $user
    @param \App\Etablissement $etablissement
    @return mixed
    /
    public function view(User $user)
    {
    if($user->type === 1 || $user->type === 0){

    return true;
    }
    }

    public function viewList(User $user){

    if($user->type == 1 || $user == 0){

    return true;
    }
    }

    /

    Determine whether the user can create etablissements.

    @param \App\User $user
    @return mixed
    */
    public function create(User $user)
    {
    //
    }

    /
    Determine whether the user can update the etablissement.

    @param \App\User $user
    @param \App\Etablissement $etablissement
    @return mixed
    /
    public function update(User $user, Etablissement $etablissement)
    {
    //
    }

    /

    Determine whether the user can delete the etablissement.

    @param \App\User $user
    @param \App\Etablissement $etablissement
    @return mixed
    /
    public function delete(User $user, Etablissement $etablissement)
    {
    //
    }

    /
    Determine whether the user can restore the etablissement.

    @param \App\User $user
    @param \App\Etablissement $etablissement
    @return mixed
    /
    public function restore(User $user, Etablissement $etablissement)
    {
    //
    }

    /

    Determine whether the user can permanently delete the etablissement.

    @param \App\User $user
    @param \App\Etablissement $etablissement
    @return mixed
    /
    public function forceDelete(User $user, Etablissement $etablissement)
    {
    //
    }
    }

    Dans le controlleur Etablissement


    public function liste(){

    if(Auth::user()->can('view')){

    $etablissements = Etablissement::all();

    return view('etablissements.listeEtablissements', compact('etablissements'));
    } else {

    return redirect::back()->with('status','Accès interdit');

    }

    }

    En vous remerciant pour votre aide !

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

    Salut,

    Il faudrait pas préciser le modèle comme deuxième argument de can ?

  • Avatar de KYoann
    Membre depuis :
    11/02/2019
    Messages :
    37

    Salut,

    Tu as mis le doigt dessus on dirais, ca marche correctement !

    Dans la méthode view de ma policy, il n'y as qu'un seul argument User $user, il est indiqué dans la doc qu'il n'est pas forcement nécessaire de passer un objet d'un model, dans ce cas il faut préciser la classe :

    if(Auth::user()->can('updateOption', Options::class)) {

    // traitement
    }

    J'imagine que sans ce detail, le framework ne sait pas ou aller chercher la policy correspondante.

Vous ne pouvez pas répondre à ce sujet.