2

我正在构建一个具有多个用户的客户端列表的应用程序。每个用户都应该只能访问他们的客户列表。(下一步是为用户添加允许其他用户访问其客户列表的能力)。

我设置了应用程序以使用内置中间件保护列表。URL /clients 仅显示经过身份验证的用户列表。但是,我无法弄清楚如何保护客户的详细信息。

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

如何保护 /clients/5 等 URL,其中 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');
}

}

4

2 回答 2

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

于 2015-07-19T16:22:25.107 回答
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'));
  }
于 2015-07-26T11:52:25.673 回答