Laravel - авторизоваться с другой политикой - PullRequest
0 голосов
/ 29 марта 2020

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

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

user-> hasMany galleries -> hasMany photos

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

URL-адрес выглядит так: / gallery / 3 / upload

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

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

РЕДАКТИРОВАТЬ:

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

В моем PhotoPolicy:

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

В моем контроллере Photos:

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

В моем AuthenticationServiceProvider:

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

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

1 Ответ

1 голос
/ 29 марта 2020

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

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

...