2016-08-26 8 views
6

पर Auth :: उपयोगकर्ता() को कॉल नहीं कर सकता मैं यह जांचने की कोशिश कर रहा हूं कि उपयोगकर्ता को किसी निश्चित मॉडल की अनुमति है या नहीं।नियंत्रक के निर्माता

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

अब Laravel 5.3, Auth::user() रिटर्न null जब नियंत्रक के निर्माता से बुलाया जा रहा है के उन्नयन के बाद,: अब तक (Laravel 5.2 के साथ), मैं निर्माता पर इस कोड को जोड़ा। यदि मैं इसे कक्षा के किसी भी अन्य तरीके से कॉल करता हूं, तो यह वर्तमान में लॉग इन उपयोगकर्ता को लौटाता है।

कोई विचार क्यों?

उत्तर

15

here देखें:

सत्र निर्माता

में 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() का उपयोग कर सकते हैं।

संबंधित मुद्दे