我正在用Laravel构建一些API端点,并且我正在使用JWTAuth作为授权请求的令牌提供程序。如何通过JWTAuth和Laravel阻止通过id访问Model?
我已经得到的设置来保护一组正常工作使用API路线:
Route::group(['prefix' => '/v1', 'middleware' => 'jwt.auth'], function() {
Route::resource('messages', 'MessagesController');
});
的Message
模型属于User
我试图执行使用某些请求关系,同时保留提供不属于用户的数据的请求:
- 获取登录用户消息列表
- 获取用户
登录的个人信息主要的问题我已经是如何阻止用户访问Message
不属于他们。我有这个在我的控制器:
public function show($message_id)
{
$message = Message::findOrFail($message_id);
return $message;
}
这显然将返回Message
不管它是否属于该用户。 有关如何改善限制访问其他用户消息的建议?
的所有邮件的列表,我能够做到在控制器中的以下内容:
public function index()
{
$user_id = Auth::User()->id;
$messages = Message::where('user_id', $user_id)->paginate(10);
return $messages;
}
这工作,但我不知道这是做的最好的方法。也许是的,但一些反馈将不胜感激。我很困惑中间件是否应该处理用户有权访问的内容,或者它是否应该成为雄辩查询的一部分?
您可能需要一个[global scope](https://laravel.com/docs/5.4/eloquent#global-scopes)。如果需要,您可以将范围应用于给定模型上的所有查询 – Ohgodwhy
找到任何解决方案了吗? – Gayan