2015-07-19 166 views
2

我正在構建一個具有多個用戶的客戶端列表的應用程序。每個用戶只能訪問他們的客戶列表。 (下一步是添加用戶允許其他用戶訪問其客戶端列表的功能)。路由保護Laravel 5.1

我有應用程序設置爲使用內置中間件來保護列表。 URL /客戶端僅顯示經過驗證的用戶列表。但是,我無法弄清楚如何保護客戶的細節。

我有我的用戶模型設置與客戶端上的hasMany和客戶端設置與belongsTo用戶。

如何保護一個URL,如/ clients/5,其中5是我的數據庫中的客戶端ID,URL顯示客戶端詳細信息?目前,任何經過身份驗證的用戶都可以使用客戶端ID鍵入url,並查看該客戶端的詳細信息。如果需要,我可以發佈代碼。但是,我只是想指出一個正確的方向來弄清楚自己。

編輯 - 額外信息/代碼

這裏是ClientsController.php顯示功能註釋掉位爲解決在此發佈的問題一個失敗的嘗試。

public function show($id) 
{ 
    //$client = \Auth::user()->clients()->get($id); 
    $client = Client::findOrFail($id); 
    return view('clients.show', compact('client')); 
} 

而且,我的客戶端模型

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Client extends Model 
{ 
    protected $fillable = [ 
    'bizName', 
    'bizStreet', 
    'bizCity', 
    'bizZip', 
    'bizEmail', 
    'bizPhone', 
    'bizNotes', 
    'user_id' 
]; 

/** 
* A client belongs to one user 
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
*/ 
public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

}

+0

請你與你的'ClientController @ show'或控制器'/客戶/ {客戶}'路線的內容更新您的問題嗎?甚至可能會插入你的「客戶」模型。 – CrackingTheCode

回答

1

因爲你可以使用這樣的事情在你的中間件首發:

public function handle($request, Closure $next) 
{ 
    if(($request->id != $request->user()->id) and ($request->user()->is_admin != true)) 
    { 
     exit('Nice try!'); 
    } 

    return $next($request); 
} 

你也可以像下面這樣: https://github.com/jenssegers/optimus

+0

我不確定如何從請求視圖傳遞登錄用戶標識。你能指導我這一點嗎? –

+0

'$ request-> user()'是你登錄的用戶,'$ request-> id'是你的路由參數,比如'{id}'。 – user2094178

0

感謝所有提供幫助的人。

我無法讓中間件工作。所以,我改變了我的控制器中的show方法來使用if語句作爲過濾器。

這是我的工作show方法:

public function show($id) 
    { 
    $client = Client::findOrFail($id); 
    if ($client->user_id != \Auth::id()) 
    { 
     return view('welcome'); 
     //TODO create unauthorized view 
    } 
    return view('clients.show', compact('client')); 
    }