Laravel 5

Policies non exécutées

Avatar de KYoann
KYoann

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 !

Posté il y a 9 mois
Avatar de bestmomo
bestmomo

Salut,

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

Posté il y a 9 mois
Avatar de KYoann
KYoann

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.

Posté il y a 9 mois

Vous ne pouvez pas répondre à ce sujet.