Laravel 5 Nouveau auth: Get current user et comment implémenter les rôles?

je suis en train d'expérimenter avec le nouveau Laravel 5 et j'ai obtenu l'authentification pour fonctionner (enregistrer/ouvrir une session).

pour obtenir l'utilisateur authentifié dans mon contrôleur j'injecte actuellement Guard dans l'action du contrôleur:

use AppHttpControllersController;
use IlluminateContractsAuthGuard;

class ClientController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index(Guard $auth)
    {
        return view('client.index', ['user' => $auth->user()]);
    }
...

Première Question: Est-ce recommandé?

Deuxième Question: Comment dois-je procéder pour mettre en œuvre une sorte de rôles ou de permissions? Quelque chose comme client.edit, client.add,... Est-Ce Que Larval 5 une sorte de complaisance ici? Comment pourrais-je définir le rôle/la permission nécessaire pour une action route/contrôleur?

je pense que je pourrais avoir besoin d'écrire mon propre middleware pour que. Des suggestions sur la façon d'aborder le problème?

20
demandé sur cgross 2014-12-19 21:09:24

2 réponses

après avoir passé plus de temps sur Laravel 5, je peux répondre à ma propre question:

injecte Guard la méthode recommandée? Non: Si vous avez besoin d'accéder à Auth à votre avis, vous pouvez le faire déjà comme ceci:

@if( Auth::check() )
    Current user: {{ Auth::user()->name }}
@endif

ceci utilise le Auth façade. Une liste de toutes les façades est dans config/app.phpaliases:

Que faire si j'ai besoin d' Auth dans mon contrôleur? Injection d'une instance de Guard comme indiqué dans la la question fonctionne, mais tu n'en as pas besoin. Vous pouvez utiliser le Auth façade comme nous l'avons fait dans le modèle:

    public function index()
    {
        if(\Auth::check() && \Auth::user()->name === 'Don') {
            // Do something
        }
        return view('client.index');
    }

soyez conscient que le \ est nécessaire avant le nom de la façade puisque L5 utilise des espaces de noms.

je veux avoir des autorisations ou rôles à l'aide de la nouvelle auth mécanisme L5: j'ai implémenté un module de permission léger en utilisant le nouveau middleware, il s'appelle Laraguard. Vérifie sur Github et dis-moi ce que tu en penses.: https://github.com/cgrossde/Laraguard

mise à jour: Par souci d'exhaustivité, je tiens à mentionner deux autres projets. Ils fournissent tout ce dont vous avez besoin pour sauvegarder les rôles et les permissions dans la base de données et fonctionnent parfaitement avec Laraguard ou sur leur propre:

51
répondu cgross 2015-02-15 19:17:45

si vous voulez créer votre propre authentification personnalisée, vous devez garder le modèle utilisateur de Laravel 5 avec toutes les dépendances. Après vous pourrez vous connecter à votre utilisateur dans votre controller. N'oubliez pas de mettre (utiliser Auth;) après le namespace de votre controller.

0
répondu Gabriel Sigouin 2015-03-28 10:17:21