2017-12-22 9 views
0

Ich versuche, Autorisierung für einige Inhalte Einschränkungen in View-Datei, wie ich weiß, dass die einzige Autorisierung zwischen Laravel unterstützt Auth (Gate, Middleware), die in View-Datei verwendet werden kann ist (Politik) auth. Und Politik-Auth arbeitet mit Laravel-Modellen, während meine Datenquellen kein Modell ist, ich bekomme nur Daten von einigen Webservices.Laravel-Richtlinie Autorisierung in Blade-View-Datei

habe ich eine neue Politik (isPlatinum)

<?php 

namespace App\Policies; 

use App\User; 
use App\WebUser; 
use Illuminate\Auth\Access\HandlesAuthorization; 

class isPlatinum 
{ 
    use HandlesAuthorization; 

    /** 
    * Create a new policy instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
    } 

    public function view(WebUser $user){ 
     return $user->user->subscription->type === 'platinum'; 
    } 

} 

Hinweis: die App \ WebUser ist kein Modell-Datei, es ist nur eine Klasse, die von Webdiensten Benutzer Informationen zu erhalten.

In meiner Klinge Ansicht Datei

@cannot('view',$isPlatinum) 
     This page is for Platinum Users 
     @endcannot 

geben Fehler

Undefined variable: isPlatinum (View: 

Ich weiß, dass ich in meiner Situation sollte Laravel Politik Auth nur für Modelle verwenden, was ist die richtige Laravel Auth i sollte verwenden und ich kann verwenden, ist innen Ansicht Datei?

Antwort

0

Sie haben keine Variable übergeben, um anzuzeigen. Sie können share data with all views:

einen Service-Provider erstellen wie folgt:

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\View; 

class AuthServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // method to fetch the webUser? 
     // $webUser = ; 
     View::share('isPlatinum', $webUser->user->subscription->type === 'platinum'); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
+0

Danke, Dies ist die Art, wie ich denke, ist die beste Wahl für mich, ich habe genau das, was Sie erwähnt haben, Fehler zeigt Antwort: { "Fehler ":" "token_not_provided"}, Token wird für die Webservice-Anforderung in App \ WebUser bereitgestellt, der Token-Wert stammt von Session :: get ('Token'), dd (Session :: get ('Token')) gibt das Token zurück ohne irgendein Problem, frage ich mich gerade, ob AuthServiceProvider nicht mit Sitzungswerten in WebUser arbeitet? – user2873860

+0

Mit Bezug auf https://laracasts.com/discuss/channels/general-discussion/laravel-5-session-data-is-not-accessible-in-the-app-boot-process wird die Boot-Methode des Providers ausgelöst Alle Anbieter registrieren sich, damit die Sitzung funktionieren kann. In meinem Fall wird der Wert des WebUser Token in der Sitzung – user2873860

+0

https://stackoverflow.com/questions/34577946/how-to-retrieve-session-data-in-serviceproviders-in-laravel – Ben