2016-08-26 26 views
6

Kullanıcının belirli bir modele izin verip vermediğini kontrol etmeye çalışıyorum. Laravel 5.3, kontrolörün kurucusundan çağrılan Auth::user() getiri null yükselttikten sonra, ŞimdiAuth :: user() denetleyicinin yapıcısında çağrılamıyor

public function __construct() 
{ 
    if (!Auth::user()->hasPermission('usergroups')) { 
     abort(404); 
    } 
} 

: Şimdiye kadar (laravel 5.2 ile birlikte), ben yapıcı Bu kodu eklendi. Sınıfın başka bir yönteminde ararsam, o anda oturum açmış olan kullanıcıyı döndürür.

Herhangi bir fikri neden?

cevap

15

here bakınız:

Oturumunu Oluşturucu

yılında laravel önceki sürümlerinde, oturum değişkenleri veya da kontrolörün yapıcı kimliği doğrulanmış kullanıcı erişebilir. Bu, hiçbir zaman çerçevenin açık bir özelliği olmayı amaçlamamış olan idi. Laravel 5.3'te, katman yazılımı henüz çalıştırılmamış olduğundan, denetleyicinizin yapıcısındaki oturuma veya kimliği doğrulanmış kullanıcıya erişemezsiniz.

Alternatif olarak, denetleyicinizin yapıcısına doğrudan Kapanma tabanlı bir katman yazılımı tanımlayabilirsiniz. Ayrıca tip-ima aydınlatmak \ Http tarafından istek oturum verileri veya doğrulanmış kullanıcı erişebilir, Tabii

<?php 

namespace App\Http\Controllers; 

use App\User; 
use Illuminate\Support\Facades\Auth; 
use App\Http\Controllers\Controller; 

class ProjectController extends Controller 
{ 
    /** 
    * All of the current user's projects. 
    */ 
    protected $projects; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware(function ($request, $next) { 
      $this->projects = Auth::user()->projects; 

      return $next($request); 
     }); 
    } 
} 

: Bu özelliği kullanmadan önce, başvurunuz yukarıda laravel 5.3.4 veya çalıştığından emin olun \ Denetleyiciniz eylemi talep sınıfı :

/** 
* Show all of the projects for the current user. 
* 
* @param \Illuminate\Http\Request $request 
* @return Response 
*/ 
public function index(Request $request) 
{ 
    $projects = $request->user()->projects; 

    $value = $request->session()->get('key'); 

    // 
} 
+0

Teşekkür ederim Samsquanch, günü kurtardın! – Sohail

0

hatta yangınlar katman önce örneğini erişmeye çalışan çünkü. Bunun yerine request()->user()'u kullanabilirsiniz.