2017-01-01 76 views
0

問題Laravel 5.3從用戶保護航線都有不同的角色

我正在尋找一種方式來保護接入線路的用戶不屬於他們,例如管理員不能訪問用戶區和簡單的用戶無法訪問管理區

嗨,我有一個laravel 5.3應用程序,它有兩種類型的用戶

  1. 聯繫
  2. 簡單的用戶

我正在試圖防止admin訪問simple user路線,反之亦然,我搜索了一番,發現創建一箇中間件

我所做的事情的一個解決方案

<?php 

namespace App\Http\Middleware; 

use Auth; 

use Closure; 

class UserRole 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (Auth::check()) // user logged 
     { 
      $request_url = $request->getRequestUri(); 
      if(Auth::user()->user_type == 1) // simple user 
      { 
       // checking if simple user is visiting routes    // starts with /user in the url 
       if (strpos($request_url, "/user") === 0) 
       { 
        return $next($request); 
       } 
       else 
       { 
        return redirect('/'); 
       } 
      } 
      // checking if admin is visiting routes     // starts with /admin in the url 
      else if(Auth::user()->user_type == 2) // admin 
      { 
       if (strpos($request_url, "/admin") === 0) 
       { 
        return $next($request); 
       } 
       else 
       { 
        return redirect('/'); 
       } 
      } 
      else 
      { 
       return redirect('/'); 
      } 
     } 
     return redirect('/'); 
    } 
} 

不幸的是,兩個人都能夠訪問彼此的禁區。我無法找到更好的方法來保護用戶訪問他們無法訪問的路由。

回答

0

如果要實現這一目標使用中間件,你需要做以下 -

  1. 創建兩個中間件,一個是管理,一個用於簡單的用戶。

  2. 然後創建你的路由兩個Route組文件即routes/web.php

  3. 保護一個路由組管理中間件,並把所有的管理相關的路線該組羣。保護另一個路由組 與 簡單用戶中間件並將所有與管理相關的路由放到該組中。

Route::group(['middleware' => ['auth', 'admin']], function() { 
    // put all your admin routes here 
}); 

Route::group(['middleware' => ['auth', 'simple-user']], function() { 
    // put all your simple user routes here 
}); 

您也可以完成,使用的角色和權限。這是一個可以滿足您的需求的軟件包。

https://packagist.org/packages/zizaco/entrust