我有一个图库策略和一个照片策略、一个图库控制器和一个图片控制器。
它是这样工作的:
user-> hasMany galleries -> hasMany photos
我确实有一个照片上传页面(带dropzone(,它使用照片控制器。
url是这样的:gallery/3/upload
只有当用户是库3的所有者时,我才想限制对此页面的访问。但此页面使用的是PhotoPolicy,它使用的是照片模型,而不是Gallery模型。
如何使用GalleryPolicy而不是PhotoPolicy来授权此页面?或者我必须从GalleryPolicy复制视图方法,并将其也包含在PhotoPolicy中?
编辑:
我不明白。。。
在我的照片政策:
public function view(User $user, Photo $photo)
{
return false;
}
在我的照片控制器中:
$this->authorize('view', $photo);
在我的AuthenticationServiceProvider:中
protected $policies = [
AppGallery::class => AppPoliciesGalleryPolicy::class,
AppPhoto::class => AppPoliciesPhotoPolicy::class,
];
Restult:页面加载很好。。即使返回为false。。为什么?
您可以在PhotoPolicy
中通过create方法授权此页面,因为您只有一种上传图像的方法,也就是使用此url。在PhotoPolicy
中,您有画廊的id,它作为参数传递,所以您可以检查画廊的所有者并限制他们。
另一点是,根据API规则,最好将上传的url更改为gallery/3/photos
。