2016-04-04 10 views
1

Ich habe mich gefragt, wie ich die Leute über this Paket verbieten könnte ...Laravel 5.1 Block-Benutzer mit Bican Rollen

Also zur Zeit als ich Laravel 5.1 und ich versuche zu ‚Verbot‘ Benutzer aus meine Seite. Ich habe eine Tabelle ‚verboten‘ Wich hat folgende tructure genannt:

+---------------+--------------+------------+-------------+------------------+----------------+--+ 
    | TABLE_NAME | COLUMN_NAME | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | 
    +---------------+--------------+------------+-------------+------------------+----------------+--+ 
    | banned  | id   | NULL   | NO   | int  | NULL      | 
    | banned  | user_id  | NULL   | NO   | int  | NULL      | 
    | banned  | banned_by | NULL   | NO   | int  | NULL      | 
    | banned  | reason  | NULL   | NO   | varchar |      255 | 
    | banned  | expires  | NULL   | NO   | datetime | NULL      | 
    | banned  | lifted  | NULL   | YES   | datetime | NULL      | 
    | banned  | lifted_by | NULL   | YES   | int  | NULL      | 
    +---------------+--------------+------------+-------------+------------------+----------------+--+ 

Ich habe auch die Standardstruktur der Rollen (Bican Rollen).

Jetzt möchte ich mit den Daten aus der 'verbotenen' Tabelle eine benutzerdefinierte gesperrte Ansicht für meine gesperrten Benutzer anzeigen können.

Was wäre der beste Weg, dies zu tun?

Antwort

0

Wenn Sie eine neue Middleware hinzufügen und in Ihre Controller in anrufen, wo Benutzer die Seite Acess kann es überprüfen, ob sie add

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class BannedMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (!Auth::guest() && Auth::user()->is('banned')) { 
      return view('BannedPageView'); 
     } 

     return $next($request); 
    } 
} 

und bearbeiten kernal.php unter protected $routeMiddleware

BannedMiddleware.php verboten sind diese

'isBanned' => \App\Http\Middleware\BannedMiddleware::class, 

Dann in Ihrem Controller hinzufügen, um dieses

public function __construct() 
    { 
     $this->middleware('isBanned'); 
    } 

Dies wird prüfen, ob sie gesperrt sind, wenn sie irgendeine Route in diesem Controller treffen.

bearbeiten


Um für jeden alles global zu überprüfen und jede Anfrage:

die gleiche Middleware und nutzen Sie diesen Code platzieren:

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Auth; 
use App\User; 
use DB; 
use Carbon\Carbon; 

class CheckBanMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (Auth::check()) { 
      if (User::CheckBan()) { 
       $bandata = DB::table('banned')->where('user_id', '=', Auth::id())->where('lifted', '=', Null)->where('expires', '>=', Carbon::now())->first(); 
       return response()->view('banned', ['bandata' => $bandata]); 
      } 
     } 
     return $next($request); 
    } 
} 

In Ihrem User.php, erstellen neue Funktion:

public static function CheckBan() 
    { 
     return DB::table('banned')->where('user_id', '=', Auth::id())->where('lifted', '=', Null)->where('expires', '>=', Carbon::now())->exists(); 
    } 

Diese Funktion gemacht wird, weil ich eine andere Methode haben etc zu speichern Verbote ...

Fügen Sie die folgende Zeile in app/http/kernel.php im protected $middleware Array.

\App\Http\Middleware\CheckBanMiddleware::class, 

Dies bietet die Daten vor jeder Anfrage zu überprüfen.

Und du bist fertig!

+0

Nun habe ich neue Middleware heute mit einer besseren Methode gemacht. Trotzdem danke für die Hilfe: D – Robin

+0

Deine Begrüßung jederzeit: D – SCRATK

+0

@RobinR WENN es richtig wäre könntest du es bitte als Antwort einstellen. Danke – SCRATK