Как ограничить доступ пользователя к записи?
Я новичок в Laravel, естьследующая задача: При создании записи в блоге, администратор может выбирать круг пользователей, которые могут подробно просматривать данную запись (попадать на внутреннюю страницу), остальные пользователи, после авторизации, могут видеть все записи, но открывать запись, к которой у них нет доступа - нельзя.
Я создал связующую таблицу user_records
=====================
user_records_id
record_id
user_id
У меня получилось сделать выборку из связующей таблицы, но тогда каждый пользователь видит только доступные ему записи, а необходимо, чтобы он мог видеть все, но открывать только те, на которые у него есть права. Помогите пожалуйста, сижу уже битый час, никак решение не приходит...
Ответы (1 шт):
Регистрируем гейт в провайдере:
Gate::define('edit-record', static function (User $user, Record $record) {
return $user->id === $record->user->id;
});
Добавляем мидлвары к роуту
Route::put('/records/{record}', [RecordController::class, 'update'])->middleware('can:edit-record');
Route::get('/records/{record}', [RecordController::class, 'edit'])->middleware('can:edit-record');
Или вызываем в контроллере
public function update(Request $request, Record $record)
{
if (! Gate::allows('edit-record', $record)) {
abort(403);
}
// Обновляем запись
}
Подробней в документации