路线保护Laravel 5.1

时间:2015-07-19 11:32:55

标签: laravel-5 laravel-5.1

我正在构建一个包含多个用户的客户列表的应用。每个用户只能访问其客户列表。 (下一步是为用户添加允许其他用户访问其客户端列表的功能)。

我已将应用程序设置为使用内置中间件保护列表。 URL /客户端仅显示经过身份验证的用户列表。但是,我无法弄清楚如何保护客户端细节。

我在客户端上使用hasMany设置了我的用户模型,并在用户上使用belongsTo设置客户端。

如何保护/ clients / 5等URL,其中5是我的数据库中的客户端ID,URL显示客户端详细信息?目前,任何经过身份验证的用户都可以使用客户端ID键入URL,并查看该客户端详细信息。我可以根据需要发布代码。但是,我只是想指出正确的方向来弄清楚自己。

编辑 - 其他信息/代码

以下是来自ClientsController.php的show函数。注释掉的位是尝试解决此处发布的问题失败。

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

}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

感谢所有提供帮助的人。

我无法让中间件工作。所以,我在控制器中更改了show方法,使用if语句作为过滤器。

这是我的工作展示方法:

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