2015-06-23 9 views
6

पर आधारित विभिन्न मार्गों के लिए रीडायरेक्ट किया गया है, मैं अपनी भूमिका के आधार पर अपने उपयोगकर्ता को विभिन्न मार्ग पर रीडायरेक्ट करना चाहता हूं। मेरे पास मेरे ऐप, "एडमिन" और "डैशबोर्ड" में दो सुरक्षित क्षेत्र हैं। मैं यह जांचना चाहता हूं कि उपयोगकर्ता प्रमाणीकृत है या नहीं, फिर इच्छित पर रीडायरेक्ट करें, लेकिन यदि उपयोगकर्ता के पास भूमिका संपादक है तो उसे डैशबोर्ड पर रीडायरेक्ट किया जाना चाहिए, अन्यथा यदि उसके पास भूमिका है तो व्यवस्थापक को व्यवस्थापक क्षेत्र में रीडायरेक्ट किया जाना चाहिए।लारवेल 5 रीडायरेक्ट

मैं अपने लॉगिन में प्रामाणिक और रजिस्टर्सउसर कक्षा का उपयोग कर रहा हूं। मैं अपने कस्टम नियंत्रक पर इस राशि:

/** 
* The default redirecTo path. 
* 
*/ 
protected $redirectTo = '/dashboard'; 

तो जब कोई उपयोगकर्ता प्रमाणीकृत है उसे डैशबोर्ड में पुनः निर्देशित किया जाएगा, लेकिन मैं अगर इरादा यूआरएल व्यवस्थापक समूह मार्ग पर है और जांच करना चाहते हैं उपयोगकर्ता व्यवस्थापक भूमिका है अगर इसे व्यवस्थापक क्षेत्र में रीडायरेक्ट किया जाना चाहिए।

मैं इस मिडलवेयर उपयोग कर रहा हूँ के लिए लॉग इन पर रीडायरेक्ट करने:

public function handle($request, Closure $next) 
{ 
    if ($this->auth->guest()) 
    { 
     if ($request->ajax()) 
     { 
      return response('Unauthorized.', 401); 
     } 
     else 
     { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    return $next($request); 
} 

उत्तर

6

आप तर्क आप की जरूरत इंजेक्षन करने के लिए अपने AuthController में विशेषता के द्वारा प्रयोग किया redirectPath विधि के ऊपर लिख सकता है। कुछ इस तरह:

/** 
* Get the post register/login redirect path. 
* 
* @return string 
*/ 
public function redirectPath() 
{ 
    // Logic that determines where to send the user 
    if (\Auth::user()->type == 'admin') { 
     return '/admin'; 
    } 

    return '/dashboard'; 
} 

संपादित करें:

Laravel सफल प्रवेश के बाद उपयोगकर्ता रीडायरेक्ट करने के लिए AuthenticatesAndRegistersUsers विशेषता में निम्नलिखित घोषणा उपयोग करता है:

return redirect()->intended($this->redirectPath()); 

इस उपयोगकर्ता अनुप्रेषित करने की कोशिश करेंगे पहले प्रयास किए गए यूआरएल के लिए।

यदि आपको पहले से लॉग इन होने पर उपयोगकर्ताओं को सही जगह पर रीडायरेक्ट करने की आवश्यकता है, तो यह आपके प्रमाणीकरण मिडलवेयर में अधिक तर्क जोड़कर सबसे अच्छा किया जाएगा।

+0

यह काम करना चाहिए, लेकिन अगर मैं पूर्ण पथ पर रीडायरेक्ट करना चाहता हूं तो क्या होगा? उदाहरण के लिए: उपयोगकर्ता "व्यवस्थापक/सेटिंग्स/सामान्य" पर जाने का प्रयास करता है, लॉगिन पर रीडायरेक्ट किया जाता है, वह लॉग इन करता है और उसके बाद/पथ पर रीडायरेक्ट किया जाता है, पूर्ण पथ नहीं। – Tropicalista

+0

डिफ़ॉल्ट रूप से, लैरावेल पहले इच्छित यूआरएल पर रीडायरेक्ट करने का प्रयास करेगा। यदि कोई नहीं था, तो यह इस विधि पर वापस आ जाएगा। –

+0

मुझे मिडलवेयर पर यूआरएल रीडायरेक्ट करना चाहिए? – Tropicalista

1

एक और दृष्टिकोण authenticated विधि

public function authenticated() 
    { 
     if(Auth::check()) { 
      if(\Auth::user()->hasRole('Super Admin')) { 
       return redirect('/admin-dashboard'); 
      } else { 
       return redirect('/user-dashbaord'); 
      } 
     }  
    } 
0

मैं इस एक का उपयोग ओवरराइड करने के लिए है। आपको मिडलवेयर रीडायरेक्ट इफ प्रमाणीकृत को संशोधित करने की भी आवश्यकता है ताकि यह घर पर नहीं जा सके। बस अलग-अलग उपयोगकर्ता के डैशबोर्ड पर।

public function authenticated() 
{ 
    if($request->user()->hasRole('admin')) 
      { 
       // return redirect()->intended(route('admin.index')); 
       return redirect()->route('admin.index'); 
      } 
     if($request->user()->hasRole('super')) 
      { 
       return redirect()->route('super.index'); 
      } 
     if($request->user()->hasRole('officer')) 
      { 
       return redirect()->route('officer.index'); 
      } 
} 
संबंधित मुद्दे