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
.
我有画廊政策和照片政策、画廊控制器和照片控制器。
它是这样工作的:
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
.