2016-05-02 20 views
1

Wie kann ich Middleware Benutzer zuweisen? Ich folge nur dem Guide Laravel 5.2, aber ich kann nicht verstehen ... ich in der Lage bin Middleware zu schaffen (i Admin-Middleware haben)Middleware und Benutzer - Laravel 5

<?php 

namespace App\Http\Middleware; 

use Closure; 

class Admin 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     return $next($request); 
    } 
} 

Ich bin in der Lage Middleware Route zuordnen

Route::group(['middleware' => ['auth', 'admin']], function() { 
    Route::resource('admin/tasks', 'Admin\\TasksController'); 
}); 

aber wie kann ich überprüfen, ob Benutzer Admin ist oder nicht? Ich folge nur die Dokumentationen zu Laravel 5.2 für die Authentifizierung, aber ich weiß nicht, wie die Seite zuzugreifen nur für „admin“ Middleware ...

Antwort

1

Ich würde Ihnen empfehlen ENTRUST Laravel package

Entrust zu verwenden ist eine prägnante und flexible Art und Weise rollenbasierte Berechtigungen zu Laravel hinzufügen 5.

+0

Ich versuche, aber ist schlecht, nur Fehler geben Sie mir auf Laravel 5.2 BadMethodCallException in Repository.php Zeile 367: Dieser Cache-Speicher unterstützt keine Tagging. – user0111001101

+0

getan, nur ändern .env-Datei mit Array, ty – user0111001101

1

ich ein kleines Beispiel für die Sie haben, ist es sehr einfach

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Factory as Auth; 

class Authenticate 
{ 
    /** 
    * The authentication guard factory instance. 
    * 
    * @var \Illuminate\Contracts\Auth\Factory 
    */ 
    protected $auth; 

    /** 
    * Create a new middleware instance. 
    * 
    * @param \Illuminate\Contracts\Auth\Factory $auth 
    * @return void 
    */ 
    public function __construct(Auth $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     if ($this->auth->guard($guard)->guest()) { 
      return response('Unauthorized.', 401); 
     } 

     return $next($request); 
    } 
} 

Wenn Sie nur guest und admin haben (wer ist in Ihrem System authentifiziert), sollten Sie wie oben beschrieben vorgehen. Aber wenn Sie eine andere Rollen haben Sie ACL anhängen müssen (zB https://github.com/Zizaco/entrust)

+0

danke, ich benutze nur zizaco mit wenig Modifikation in .env-Datei! – user0111001101

2

Frage 1 Wie Benutzer überprüfen, ob admin

Idenken mitist eine gute Lösung. Sie können den Benutzerstatus in der Sitzung speichern. Und in der Admin Middleware können Sie prüfen, ob der Benutzer admin von if (session('statut') === 'admin') ist.

Frage 2 Seiten Zugriff von Benutzern

  • Wenn Benutzer admin, werden wir die Anfrage von return $next($request);
  • passieren Wenn der Benutzer nicht Administrator ist, werden wir auf Index-Seite oder andere Seite umleiten Sie wollen von return new RedirectResponse(url('/'));

Der folgende Code kann Ihnen helfen.

<?php namespace App\Http\Middleware; 

    use Closure; 
    use Illuminate\Http\RedirectResponse; 

    class Admin { 

    public function handle($request, Closure $next) 
    { 

     if (session('statut') === 'admin') 
     { 
      return $next($request); 
     } 
     return new RedirectResponse(url('/')); 
    } 

    } 
+0

danke Mann, ich lerne mit Puople wie Sie, und @Pavel Krasnoperov – user0111001101