Как ограничить доступ пользователя к записи?

Я новичок в Laravel, естьследующая задача: При создании записи в блоге, администратор может выбирать круг пользователей, которые могут подробно просматривать данную запись (попадать на внутреннюю страницу), остальные пользователи, после авторизации, могут видеть все записи, но открывать запись, к которой у них нет доступа - нельзя.

Я создал связующую таблицу user_records

=====================
  user_records_id
  record_id
  user_id

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


Ответы (1 шт):

Автор решения: Walfter

Регистрируем гейт в провайдере:

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);
    }
    // Обновляем запись
}

Подробней в документации

→ Ссылка