Laravel — разрешить просматривать и редактировать только владелец заметки: Middleware или FormRequests?

Представьте себе приложение для личных заметок. Пользователи могут добавлять, просматривать и редактировать свои заметки, но не заметки, принадлежащие другим пользователям.

Доступ к заметкам осуществляется следующим образом: app.dev/notes/{id}

Естественно, если у меня есть заметка с идентификатором 140, но измените идентификатор на 160 в URL, я смогу просмотреть эту заметку.

Я хочу предотвратить это. Я думал об использовании промежуточного программного обеспечения для этого, но я читал, что люди не должны использовать промежуточное программное обеспечение для этого, потому что оно не гибкое, и вместо этого я должен использовать FormRequests.

Проблема в том, что я не понимаю, как я мог использовать FormRequests в этом случае. Я использовал FormRequests, чтобы запретить пользователю редактирование записка, которая не принадлежит им. Если у меня есть записка с идентификатором 140и попробуйте отредактировать / отправить сообщение с идентификатором 160, мой запрос формы не позволит мне сделать это.

Но этот FormRequest на самом деле не мешает мне просматривать заметку с идентификатором 160,

Может кто-нибудь указать мне правильный способ сделать это?

Спасибо

0

Решение

Вы можете использовать политику. Более чистый и простой способ авторизации.

Политика авторизации: Laravel

После создания и регистрации вашей политики вы можете сделать что-то вроде

public function access(User $user, Note $note)
{
return $user->id === $note->user_id;
}

Тогда в вашем методе

if (!$user->cannot('access', $note))
{
// throw error or redirect somewhere else
}
1

Другие решения

Я бы использовал промежуточное программное обеспечение для этого. Пусть промежуточное ПО получит текущего пользователя, проверит, есть ли у него доступ к указанной заметке, и прервет его, если у него нет доступа.

Если вы используете шаблон репозитория, убедитесь, что вы используете функцию конструкции промежуточного программного обеспечения для передачи любых необходимых репозиториев / зависимостей.

0

По вопросам рекламы [email protected]