2015-06-23 23 views
6

Tôi muốn chuyển hướng người dùng của mình đến tuyến đường khác, dựa trên vai trò của họ. Tôi có hai khu vực được bảo vệ trong ứng dụng của tôi, "quản trị" và "trang tổng quan". Tôi muốn kiểm tra xem người dùng có được xác thực hay không, sau đó chuyển hướng đến dự định, nhưng nếu người dùng có trình chỉnh sửa vai trò, nó sẽ được chuyển hướng đến trang tổng quan, nếu không, người quản trị vai trò sẽ được chuyển hướng đến khu vực quản trị viên.Chuyển hướng Laravel 5 dành cho tuyến đường khác nhau dựa trên vai trò

Tôi đang sử dụng lớp AuthenticatesAndRegistersUsers trong thông tin đăng nhập của mình. Tôi có điều này trên bộ điều khiển tùy chỉnh của tôi:

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

Vì vậy, khi người dùng được xác thực nó sẽ được chuyển đến bảng điều khiển, nhưng tôi muốn kiểm tra xem địa chỉ dự định là trên tuyến đường nhóm admin và nếu người dùng có vai trò quản trị nó sẽ được chuyển hướng đến khu vực quản trị.

Tôi đang sử dụng middleware này để chuyển hướng để đăng nhập:

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

Trả lời

6

Bạn có thể ghi đè lên redirectPath phương pháp được sử dụng bởi các đặc điểm trong AuthController của bạn để tiêm logic mà bạn cần. Một cái gì đó như thế này:

/** 
* 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'; 
} 

EDIT:

Laravel sử dụng tờ khai sau trong AuthenticatesAndRegistersUsers đặc điểm để chuyển hướng người dùng sau khi đăng nhập thành công:

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

này sẽ cố gắng chuyển hướng người dùng vào URL đã thử trước đó.

Nếu bạn cần chuyển hướng người dùng đến đúng nơi khi họ đã đăng nhập, điều đó sẽ được thực hiện tốt nhất bằng cách thêm nhiều logic hơn vào phần mềm trung gian xác thực của bạn.

+0

Điều này sẽ hiệu quả, nhưng nếu tôi muốn chuyển hướng đến đường dẫn đầy đủ thì sao? ví dụ: người dùng cố gắng truy cập "admin/settings/general", được chuyển hướng đến thông tin đăng nhập, anh ấy đăng nhập và sau đó được chuyển hướng đến/admin, chứ không phải đường dẫn đầy đủ. – Tropicalista

+0

Theo mặc định, Laravel sẽ cố gắng chuyển hướng đến URL dự định trước tiên. Nếu không có, nó sẽ rơi trở lại phương pháp này. –

+0

Tôi nên đặt url chuyển hướng trên phần mềm trung gian? – Tropicalista

1

Một cách khác là để ghi đè authenticated phương pháp

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

tôi sử dụng thế này. Bạn cũng cần phải sửa đổi phần mềm trung gian Chuyển hướngNếu được xác thực để nó không định tuyến về nhà. Chỉ đến trang tổng quan của người dùng khác.

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'); 
      } 
} 
Các vấn đề liên quan