Политика Laravel для защиты подобъектов - PullRequest
0 голосов
/ 13 мая 2019

У меня быстрый вопрос о политике Laravel. Я пишу очень простой API. У меня есть объект Podcast с некоторыми конечными точками GET:

GET /api/podcasts => returns all podcasts
GET /api/podcasts/{podcast} => returns a given podcast

Я использую Политики, привязанные к модели Подкаста. И я использую $this->authorizeResource(Podcast::class); в конструкторе моего PodcastController класса. Это прекрасно работает, я могу получить доступ только к своим собственным подкастам!

Теперь у меня есть подобъекты, например, файлы. Поэтому я создал новую конечную точку:

GET /api/podcasts/{podcast}/files/{file} => returns a specific file of a podcast

Я добавил $this->authorizeResource(Podcast::class); в конструктор класса FileController. Делая это, я не могу ввести любой идентификатор подкаста в URL, только мой собственный, что хорошо. Однако я могу ввести любой идентификатор файла в URL, включая файлы, которые не принадлежат моему подкасту. Например:

GET /api/podcasts/1/files/3

Подкаст # 1 мой, это хорошо. Однако файл № 3 принадлежит подкасту № 2 (не № 1), который НЕ мой. Я должен получить несанкционированный доступ в этой точке.

Есть идеи? Спасибо

Axel

1 Ответ

0 голосов
/ 13 мая 2019

Я действительно нашел начало решения, но нахожу его грязным. Я написал явное условие привязки модели:

        Route::bind('file', function($value, $router) {
            return File::where('podcast_id', $router->parameter('podcast'))->findOrFail($value);
        });

Что вы, ребята, думаете об этом? Спасибо

...