web-dev-qa-db-fra.com

Laravel 5 new auth: Obtenir l'utilisateur actuel et comment implémenter les rôles?

Je suis actuellement en train d’expérimenter avec le nouveau Laravel 5 et j’ai obtenu l’authentification (registre/login).

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

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;

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 la manière recommandée?

Deuxième question: Comment pourrais-je m'engager dans la mise en place de certains rôles/autorisations? Quelque chose comme client.edit, client.add, ... Est-ce que Larval 5 offre une certaine commodité ici? Comment définirais-je le rôle/autorisation nécessaire pour une action route/contrôleur?

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

20
cgross

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

Est-ce que l'injection Guard est recommandée? Non: Si vous avez besoin d'accéder à Auth à votre vue, vous pouvez le faire déjà comme ceci:

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

Ceci utilise la façade Auth. Une liste de toutes les façades disponibles est dans config/app.php sous aliases:

Et si j'ai besoin de Auth dans mon contrôleur? L'injection d'une instance de Guard comme indiqué dans la question fonctionne, mais vous n'avez pas besoin de le faire. Vous pouvez utiliser la façade Auth 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');
    }

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

Je souhaite disposer d'autorisations/de rôles à l'aide du nouveau mécanisme d'authentification de L5: J'ai implémenté un module d'autorisation allégé utilisant le nouveau middleware, il s'appelle Laraguard. Allez voir sur Github et dites-moi ce que vous pensez: https://github.com/cgrossde/Laraguard

UPDATE: Par souci d'exhaustivité, je souhaite mentionner deux autres projets. Ils fournissent tout ce dont vous avez besoin pour enregistrer les rôles et les autorisations dans la base de données et fonctionnent parfaitement avec Laraguard ou séparément:

51
cgross

Si vous voulez créer votre propre authentification personnalisée, vous devez conserver le modèle utilisateur de Laravel 5 avec toutes les dépendances. Une fois que vous pourrez connecter votre utilisateur à votre contrôleur. N'oubliez pas de mettre (utilisez Auth;) après l'espace de noms de votre contrôleur.

0
Gabriel Sigouin