Laravel - 使用其他策略授权

Laravel - Authorize with other policy

我有画廊政策和照片政策、画廊控制器和照片控制器。

它是这样工作的:

user-> hasMany galleries -> hasMany photos

我有一个使用照片控制器的照片上传页面(带 dropzone)。

url是这样的:/gallery/3/upload

我想限制只有当用户是画廊 3 的所有者时才能访问此页面。但是此页面使用 PhotoPolicy,它使用照片模型,而不是画廊模型。

如何使用 GalleryPolicy 而不是 PhotoPolicy 授权此页面?或者我是否必须从 GalleryPolicy 复制视图方法并将其也包含在 PhotoPolicy 中?

编辑:

我不明白这个...

在我的 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,
];

结果:页面加载正常..即使 return 为假..为什么?

您可以在PhotoPolicy 的create 方法中授权此页面,因为您只有一种上传图片的方式也使用此url。 在 PhotoPolicy 中,您有作为参数传递的画廊 ID,因此您可以检查画廊的所有者并限制他们。

还有一点就是根据API规则最好把upload的url改成gallery/3/photos.