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.
3 Réponses :
Vous devez mettre cela dans votre fonction dans le contrôleur
$this->authorize('create',$user)
Mettez les lignes ci-dessous dans votre fonction de contrôleur $ this-> authorizeForUser ($ currentUser, 'create', User :: class)
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 >
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 decreate