2017-09-03 1 views
0

Ich möchte globale Variable festlegen, nachdem der Benutzer authentifiziert ist - lassen Sie uns permissions anrufen. Die Variable sollte in Controllern und Ansichten verfügbar sein.Erstellen von globalen Berechtigungsvariablen nach Benutzerautorisierung in Laravel

Was ist der beste Weg, um es zu erreichen? Jetzt muss ich in jeder Methode Datenbankabfragen durchführen und Benutzerrollen überprüfen, was nicht optimal ist.

Ich weiß, dass ich view::share Methode in appserviceprovider erklären können, um die Variable an Ansichten übergeben, aber Boot-Methode wird ausgeführt, nachdem der Benutzer authentifiziert ist.

aktualisieren

Ich habe Base geschaffen, die aus Steuer erstreckt.

Base:

class BaseController extends Controller { 

    public $permissions; 

    public function __construct() { 
     $this->permissions = GroupRoles::where('id', Auth::user()->id)->first(); 
    } 

} 

Dann Ich versuche, die Berechtigungen Variable von Usercontroller zuzugreifen, die von Base erstreckt. Versuch, Zugriff auf Nicht-Objekt zu erhalten. Ich denke, das liegt daran, dass der BaseController-Konstruktor vor der Middleware aufgebaut ist.

class UserController extends BaseController { 

    public function showPermissions() { 
    return var_dump($this->permissions); 
    } 

} 

Die Endlösung

Der Grundstein war die $this->middleware(function ($request, $next) im Base zu verwenden.

Antwort

0

Versuchen Sie es in der Steuerung oder erstellen Sie Ihre eigenen Base dann von ihm Ihre Controller erweitern und in der Base können Sie dieses

public $permissions; 

public function __construct() 
{ 
    $permissions = Permissions::all() //For example 
    $this->permissions = $permissions 
} 

tun Dann können Sie darauf zugreifen von jedem Controller wie folgt $this->permissions

+0

Ich habe BaseController und Konstruktor damit erstellt. Aber ich kann immer noch nicht auf die Berechtigungsvariable von UserController zugreifen. Ich denke, dass ich etwas mehr tun sollte. Weil ich den 'Versuch, Eigenschaft von Nicht-Objekt zu erhalten 'bekomme. Das Problem ist also immer noch mit der Authentifizierung verbunden. –

+0

Aber versuchen Sie Permission aus Paket zu setzen? Der Benutzer-Controller muss BaseController erweitern, damit Sie es bekommen können. Oder versuchen Sie zuerst, die Variable im Konstruktor auszugeben, damit Sie sicher sein können, dass die gewünschten Daten vorhanden sind. –

+0

UserController erweitert den BaseController. BaseController erweitert den Controller. Ich erhalte diesen Fehler, weil die Methode construct aufgerufen wird, bevor die Auth-Methode geladen ist oder ich nicht weiß, wie ich sie aufrufen soll. Der BaseController hat den folgenden Code im Konstruktor: '$ this-> Berechtigungen = GroupRoles :: where ('id', Auth :: user() -> id) -> first();' –

Verwandte Themen