Bonjour,

Mon projet Laravel a besoin d'un systeme de roles pour séparer le site en deux parties. Admin / Writer
Je n'ai pas du tout envie d'installer un Package pour ça, je veux juste simplement afficher deux contenu different sur une même URL.

J'ai ajouté à la table users un champ role.
Maitenant j'aimerais simplement creer un scope ou autre pour pouvoir savoir si mon utilisateur connecté est un admin ou un writer.

Est ce que quelqu'un pourrait m'aider sur l'elaboration de cette fonction / scope.

Merci

3 réponses


Frosty-Z
Réponse acceptée

Du coup normalement tu dois pouvoir t'en servir dans ta vue avec je suppose

@if (Auth::User()->isAdmin())

Concernant la méthode isAdmin :

  • Comme conseillé par quelqu'un sur le tchat tu peux remplacer 'admin' par une constante (mieux si tu t'en sers ailleurs et pour éviter plus facilement les problèmes de fautes de frappe...)

  • Et simplifier le code car dans le if tu as déjà un booléen :

public static function isAdmin()
{
     // j'ai mis ROLE_ADMIN comme exemple, ça peut être aussi une constante de classe UserRole::ADMIN...
     return (Auth::user()->role == ROLE_ADMIN); 
}
Pyxel
Auteur

J'ai ajouté ça dans le Model User :

    public static function isAdmin()
    {
        if(Auth::user()->role == 'admin'){
            return true;
        } else {
            return false;
        }
    }

Dès que tu as une gestion de roles plus complexe n'hésite pas à aller vers une solution basée sur un middleware comme suggéré par Greg et détaillé ici par exemple (en anglais) : https://gist.github.com/drawmyattention/8cb599ee5dc0af5f4246