2016-08-26 2 views
6

사용자에게 특정 모델에 대한 사용 권한이 있는지 확인하려고합니다. Laravel 5.3, 컨트롤러의 생성자에서 호출되는 Auth::user() 반환 null로 업그레이드 한 후, 이제컨트롤러의 생성자에서 Auth :: user()를 호출 할 수 없습니다.

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

: 지금까지 (Laravel 5.2), I는 생성자에서이 코드를 추가했습니다. 클래스의 다른 메서드 내에서 호출하면 현재 로그인 한 사용자를 반환합니다.

어떤 아이디어가 필요한가요?

답변

15

here를 참조하십시오

세션을 생성자

에서 Laravel의 이전 버전에서는, 당신은 세션 변수 또는 컨트롤러의 생성자에서 인증 된 사용자에 액세스 할 수 있습니다. 이것은 프레임 워크의 명시적인 기능을 의도하지 않았습니다. Laravel 5.3에서는 미들웨어가 아직 실행되지 않았기 때문에 컨트롤러의 생성자에서 세션이나 인증 된 사용자를 액세스 할 수 없습니다.

대신 컨트롤러 생성자에서 클로저 기반 미들웨어를 직접 으로 정의 할 수 있습니다. 당신은 또한 타입 힌트를 분명히을 \ HTTP를하여 요청 세션 데이터 나 인증 된 사용자에 액세스 할 수 있습니다, 물론

<?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); 
     }); 
    } 
} 

:이 기능을 사용하기 전에, 응용 프로그램이 위의 Laravel 5.3.4 이상을 실행해야합니다 을 \ 컨트롤러 액션에 요청 클래스 :

/** 
* 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

Samsquanch에게 감사드립니다. – Sohail

0

당신도 화재 미들웨어하기 전에 인스턴스에 액세스하려고 시도하고 있기 때문에. 대신 request()->user()을 사용할 수 있습니다.

관련 문제