0
votes

Comment filtrer les paramètres de demande basés sur le rôle d'utilisateur dans Laravel?

J'ai une application qui possède des rôles d'administrateur, de gestionnaire et d'employé. Un manager peut modifier des champs A, B, C de tous les employés. Un administrateur peut modifier des champs A, B, D, E de tous les utilisateurs.

question: Comment devrais-je filtrer les paramètres en fonction du rôle d'utilisateur?

Considérations:

  1. Je ne veux pas filtrer les paramètres à l'intérieur du contrôleur avec une clause si / else car il se sent si sale.
  2. Il existe une option pour étendre la classe formequest , mais c'est une approche hacky. Le code finit pas très lisible comme formequest n'est jamais destiné à la manipulation de la demande.
  3. Je peux séparer cette logique en une méthode privée à l'intérieur du contrôleur. Cela fonctionne, mais il y a encore un contrôleur de graisse.
  4. Je peux séparer les itinéraires et les contrôleurs pour admin, gestionnaire et utilisateur. Le code semble beaucoup plus simple au prix d'une structure plus complexe.

    Quelle opinion avez-vous à ce sujet? Toute autre suggestion?

    Merci beaucoup!

    EDIT: --------------
    Juste une clarification depuis que beaucoup sont confuses sur ce que je demande:

    Je fais déjà une autorisation avec stratégie et Gate . Ce que je demande, c'est sur ce cas spécifique, lorsque vous souhaitez mettre à jour un utilisateur. Un manager peut mettre à jour certains champs (A, B, C) alors qu'un administrateur peut mettre à jour d'autres champs (A, B, D, E).
    Maintenant, nous devons accepter différents paramètres de demande en fonction du rôle de l'utilisateur, mais où devrions-nous faire cela? Dans ce contrôleur, dans une classe formequest étendue ou dans un contrôleur séparé?

    merci !!!


2 commentaires

Vous pouvez utiliser des portes et des stratégies https://laravel.com/docs/5.8/authorisation Vous pouvez gérer itinéraire, contrôleur, lame basé sur les rôles d'administration


Avez-vous envisagé un règles de validation personnalisées ?


3 Réponses :


0
votes

Je pense que vous utilisez la même table indique les «utilisateurs» pour stocker des données pour admin, gestionnaire et employé. Faites une nouvelle colonne, «user_role». Chaque utilisateur sera fourni avec 1, 2 et 3 pour admin, gestionnaire et employé respectivement. Il vous suffit de chercher 'user_role' de la table.

Suivant , vous devez effectuer une fonction générique pour rôle et transmettre l'utilisateur_role.


0 commentaires

1
votes

Un tir dans le noir Peut-être, mais pourriez-vous créer une classe pour chaque rôle que vous avez une constante qui décide quels champs sont disponibles pour ce rôle spécifique? XXX PRE>

et dans votre Demande: P>

$className = ucfirst($user->getRole()) . 'Role';

$fields = $className::EDITABLE_USER_FIELDS;

$data = $request->only($fields);


2 commentaires

C'est une approche que je n'ai pas pensée. Très intéressant! Un problème concerne la validation, car chaque champ est livré avec sa propre validation. Ce cours de rôle devra également contenir cela aussi. Cependant, je ne suis pas sûr entre celui-ci et mon approche de créer un contrôleur séparé qui sera meilleur.


Vous pouvez créer une demande pour cela et obtenir les mêmes champs là-bas. laracasts.com/discuss/channel/géneral- Discussion / ... Peut-être que cela peut aider?



0
votes

J'ai trouvé cette vidéo sur les laracasts que j'ai regardée il y a longtemps mais j'ai oublié. Cela m'a donné la réponse exacte dont j'avais besoin.
Créer apparemment un nouveau contrôleur et coller aux conventions de crud de Laravel est la voie à suivre. https://laracasts.com/series/laravel-from-scratch- 2018 / épisodes / 20

Merci à tous d'avoir passé du temps à répondre à ma question!


0 commentaires