Представьте себе приложение для личных заметок. Пользователи могут добавлять, просматривать и редактировать свои заметки, но не заметки, принадлежащие другим пользователям.
Доступ к заметкам осуществляется следующим образом: app.dev/notes/{id}
Естественно, если у меня есть заметка с идентификатором 140
, но измените идентификатор на 160 в URL, я смогу просмотреть эту заметку.
Я хочу предотвратить это. Я думал об использовании промежуточного программного обеспечения для этого, но я читал, что люди не должны использовать промежуточное программное обеспечение для этого, потому что оно не гибкое, и вместо этого я должен использовать FormRequests.
Проблема в том, что я не понимаю, как я мог использовать FormRequests в этом случае. Я использовал FormRequests, чтобы запретить пользователю редактирование записка, которая не принадлежит им. Если у меня есть записка с идентификатором 140
и попробуйте отредактировать / отправить сообщение с идентификатором 160
, мой запрос формы не позволит мне сделать это.
Но этот FormRequest на самом деле не мешает мне просматривать заметку с идентификатором 160
,
Может кто-нибудь указать мне правильный способ сделать это?
Спасибо
Вы можете использовать политику. Более чистый и простой способ авторизации.
После создания и регистрации вашей политики вы можете сделать что-то вроде
public function access(User $user, Note $note)
{
return $user->id === $note->user_id;
}
Тогда в вашем методе
if (!$user->cannot('access', $note))
{
// throw error or redirect somewhere else
}
Я бы использовал промежуточное программное обеспечение для этого. Пусть промежуточное ПО получит текущего пользователя, проверит, есть ли у него доступ к указанной заметке, и прервет его, если у него нет доступа.
Если вы используете шаблон репозитория, убедитесь, что вы используете функцию конструкции промежуточного программного обеспечения для передачи любых необходимых репозиториев / зависимостей.