2016-09-10 4 views
2

Ich habe ein Problem auf Laravel 5.3 mit der neuen Gate::allows Methode.Tor :: funktioniert nicht in Laravel 5.3

Hier ist meine AuthServiceProvider.php für den Test:

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Gate; 
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; 

class AuthServiceProvider extends ServiceProvider 
{ 
    /** 
    * The policy mappings for the application. 
    * 
    * @var array 
    */ 
    protected $policies = [ 
     'App\Model' => 'App\Policies\ModelPolicy', 
    ]; 

    /** 
    * Register any authentication/authorization services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     $this->registerPolicies(); 

     Gate::define('settings', function ($user) 
     { 
      return true; 
     }); 
    } 
} 

Normalerweise was auch immer die Rolle des Benutzers, alle die Einstellungen zugreifen können.

Aber das zeigt immer "Nein" anstelle von "OK" an.

<?php 

namespace App\Http\Controllers; 

use Gate; 
use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

class SettingsController extends Controller 
{ 
    public function __construct(Request $request) 
    { 
    echo Gate::allows('settings') ? 'ok' : 'no'; 
    } 
} 

Antwort

4

Von Laravel 5.3 wir nicht Sitzung oder den authentifizierten Benutzer in Controllern Konstrukteuren zugreifen können, wie in der seit den Gate Fassaden

upgrade guide angegeben verwendet das User Modell, wahrscheinlich versucht, es dem Benutzer den Zugriff aber es ist noch nicht fertig im Konstruktor Ihres Controllers

So sollten Sie eine Middleware verwenden, um die Gate zu überprüfen. Sie können auch eine Closure-basierte Middleware direkt im Controller-Konstruktor verwenden:

2

Sie müssen autorisiert sein. Wenn Laravel den Benutzer nicht anzeigt, wird false zurückgegeben.

1

ich gleiche Problem hatte, von dem, was ich verstehe AuthServiceProvider unter \ App \ Providers Namespace ist also, wenn Sie Klassen in $ Richtlinien Eigenschaften ohne globalen Namensraum setzen auch sie unter \ App \ Providers Namespace werden .. in Ihrem Fall also \ App \ Provider \ App \ Model und \ App \ Providers \ Policies \ ModelPolicy.

Um es zusammenzufassen, versuchen Sie dies $ Richtlinien Eigenschaften wie:

protected $policies = [ 
     \App\Model::class => \App\Policies\ModelPolicy::class, 
    ]; 

Hoffnung, dass :) PS

hilft. Es ist meine erste Aktivität hier, also hallo alle zusammen und alles Gute im neuen Jahr.

1

Sie müssen autorisiert sein. Wenn Laravel den Benutzer nicht anzeigt, wird false zurückgegeben. Oder benutzt du Wache? Ich habe es deswegen und hatte ein ähnliches Problem.

Verwandte Themen