我正在构建一个包含多个用户的客户列表的应用。每个用户只能访问其客户列表。 (下一步是为用户添加允许其他用户访问其客户端列表的功能)。
我已将应用程序设置为使用内置中间件保护列表。 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');
}
}
答案 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'));
}