Laravel – Авторизация с другой политикой

У меня есть политика галереи и политика фотографий, контроллер галереи и контроллер фотографий.

Это работает следующим образом:

user-> hasMany galleries -> hasMany photos

У меня есть страница загрузки фотографий (с dropzone), которая использует фотоконтроллер.

URL такой: /gallery/3/upload

Я хочу ограничить доступ к этой странице, только если пользователь является владельцем галереи 3. Но эта страница использует PhotoPolicy, которая использует модель Photo, а не модель Gallery.

Как авторизовать эту страницу, используя GalleryPolicy вместо PhotoPolicy? Или мне нужно скопировать метод просмотра из GalleryPolicy и использовать его также в PhotoPolicy?

ИЗМЕНИТЬ:

Я этого не понимаю...

В моей фотополитике:

 public function view(User $user, Photo $photo)
{
    return false;        
}

В моем контроллере фотографий:

        $this->authorize('view',  $photo);

В моем AuthenticationServiceProvider:

protected $policies = [
    \App\Gallery::class => \App\Policies\GalleryPolicy::class,
    \App\Photo::class => \App\Policies\PhotoPolicy::class,
];

Результат: страница загружается нормально.. даже если возврат неверен.. почему?


person sharkyenergy    schedule 29.03.2020    source источник


Ответы (1)


Вы можете авторизовать эту страницу в PhotoPolicy методе создания, потому что у вас есть только один способ загрузки изображений, который также использует этот URL-адрес. В PhotoPolicy у вас есть идентификатор галереи, который был передан в качестве параметров, поэтому вы можете проверить владельца галереи и ограничить его.

И еще один момент, согласно правилам API, лучше изменить URL-адрес загрузки на gallery/3/photos.

person Mehrdad Saami    schedule 29.03.2020
comment
Привет, спасибо за ответ .. не уверен, что понял это сложно ... как мне получить идентификатор галереи в политике фото, если я его не пройду? Я также пытался создать новый метод, но он не найден... - person sharkyenergy; 29.03.2020
comment
как это? ` public function create(User $user, Gallery $gallery) { return $user-›id == $gallery-›user_id; }` - person sharkyenergy; 29.03.2020
comment
вы можете передать модель галереи в качестве параметров в ворота laravel и проверить владельца галереи. для получения дополнительной информации вы можете увидеть stackoverflow.com/questions/36482737/ - person Mehrdad Saami; 29.03.2020