2
votes

Laravel ne peut pas créer de stratégie pour le modèle utilisateur

Peut créer une politique pour le modèle utilisateur.

J'ai créé une politique comme celle-ci

php artisan make: policy UserPolicy --model = User

J'ai eu UserPolicy.php avec des actions CRUD.

Ensuite, dans AuthServiceProvider.php, j'ai ajouté

...
use App\Policies\UserPolicy;
use App\User;
...

protected $policies = [
            // 'App\Model' => 'App\Policies\ModelPolicy',
            User::class => UserPolicy::class,
        ];

Mais rien ne se passe. Comme je comprends le modèle Policy for User généré par défaut, renvoyant false à chaque action, j'ai même explicitement ajouté ceci à la classe UserPolicy:

$this->authorize('create', $user);

Je peux toujours créer un utilisateur.

Plus tard, je devrai vérifier si l'utilisateur essaie de modifier son propre message ou non. Tout devrait être interdit aux utilisateurs non-administrateurs, à l'exception de la modification de leur propre profil (modèle).

Il me manque quelque chose d'évident.

MISE À JOUR: p >

Si je mets

public function create(User $user)
{
    return false;
}

Dans la méthode de création UsersController, il invoquera la méthode de création Policy, donc il semble que quelque chose ne va pas avec

protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
        User::class => UserPolicy::class,
    ];

dans AuthServiceProvider.


1 commentaires

Oui, sur la documentation, laravel.com/docs/5.8/authorization recherchez Méthodes Sans modèles . Il mentionne à quelques reprises qu'il y a des étapes supplémentaires à suivre, généralement lors de l'utilisation de create


3 Réponses :


0
votes

Vous devez mettre cela dans votre fonction dans le contrôleur $this->authorize('create',$user)


0 commentaires

0
votes

Mettez les lignes ci-dessous dans votre fonction de contrôleur $ this-> authorizeForUser ($ currentUser, 'create', User :: class)


0 commentaires

2
votes

Vous pouvez écrire ce code pour la politique utilisateur

dans UserPolicy.php:

public function update(User $user, User $model)
{
    return $user->id === $model->id;
}

Par exemple, avec ce code, vous pouvez mettre à jour uniquement votre propre profil. p >


0 commentaires