2015-07-19 134 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')); 
    }