У меня есть веб-приложение, где пользователи могут загружать документы.
Пользователь может загрузить много документов (hasMany).
У меня есть файл ниже Vue
, который выбирает мой внутренний API для получения информации из загруженного документа. Ниже приведен метод, который я использую:
ShowDocument.Vue
getDocument: function (documentId) {
axios.get('/api/documents/' + documentId).then((response) => {
this.document = response.data.document;
}).catch(error => {
console.log(error);
})
},
В моем файле routes/api.php
я определил следующий маршрут:
Route::apiResource('documents', 'Api\DocumentsController')->middleware('ajax')->only(['show']);
Как вывидите, у меня есть специальное промежуточное ПО под названием ajax
. Это гарантирует, что только AJAX-запросы к конечной точке API принимаются:
app\Http\Middleware\RequestIsAjax.php
public function handle($request, Closure $next)
{
if (! $request->ajax())
return abort(403);
return $next($request);
}
Далее, DocumentsController
просто выглядит так:
public function show($id)
{
$document = Document::findOrFail($id);
return response()->json([
'document' => $document,
], 200);
}
Пока все хорошо. Теперь моя проблема в том, что эта конечная точка API используется только для внутреннего использования (на данный момент), но как пользователь я могу легко просматривать информацию о документе других пользователей, просто отправив запрос AJAX по адресу:
/api/documents/<documentID>
и просто замените его на другой номер.
Мой вопрос: как я могу предотвратить это и обеспечить, чтобы только пользователь мог просматривать свои собственные документы?