Laravel-Policy multiple values-BelongsToMany

У меня есть три таблицы: пользователи, файлы и file_project.
Каждый файл имеет идентификатор пользователя.

Администратор может удалить каждый файл, но пользователь только те файлы, которые он загрузил.

вид.лезвие.РНР

Введите описание изображения здесь

таблица файлов

Введите описание изображения здесь

таблица file_project

Введите описание изображения здесь

После отправки формы я получаю эти:

[
    "23",
    "22",
    "24"
]

Таким образом, теперь я могу удалить файлы из контроллера.
Это контроллер:

public function deleteSelected (Request $request)
{
    $files = $request->files;
    File::destroy($files);

    return redirect()->back();
}

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

Теперь я могу идентифицировать записи из таблицы файлов, используя идентификаторы из $files

public function deleteSelected (Request $request)
{
    $files = $request->files;
    return $list = File::find($files);
}

И ответ::

Введите описание изображения здесь

Есть помощь?

Спасибо!

1 ответ

  1. Если вы хотите разрешить удаление файла только пользователям с разрешениями, вы можете использовать следующее:

    public function deleteSelected (Request $request)
    {
        $files = $request->files;
        $loggedInUser = Auth::user();
        if(!$loggedInUser->isAdmin() || File::whereIn('id', $files)->where('user_id', $loggedInUser->id)->count() < count($files)) {
            abort(403);
        }
        File::destroy($files);
    
        return redirect()->back();
    }
    

    А затем добавьте логику для isAdmin в пользовательскую модель