【问题标题】:Laravel - Authorize with other policyLaravel - 使用其他策略授权
【发布时间】:2020-03-29 09:02:06
【问题描述】:

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

它是这样工作的:

user-> hasMany galleries -> hasMany photos

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

网址是这样的:/gallery/3/upload

只有当用户是画廊 3 的所有者时,我才想限制对这个页面的访问。但是这个页面使用 PhotoPolicy,它使用了 Photo 模型,而不是 Gallery 模型。

如何使用 GalleryPolicy 而不是 PhotoPolicy 授权此页面?还是我必须从 GalleryPolicy 复制 view 方法并将其也包含在 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,
];

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

【问题讨论】:

    标签: laravel policies


    【解决方案1】:

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

    另外一点是根据API规则最好把上传的url改成gallery/3/photos

    【讨论】:

    • 您好,感谢您的回答.. 不确定我是否理解它很难...如果我没有通过它,我如何在照片政策中包含画廊的 ID?我也尝试创建一个新方法,但是没有找到...
    • 这样吗? ` public function create(User $user, Gallery $gallery) { return $user->id == $gallery->user_id; }`
    • 您可以将画廊的模型作为参数传递给 laravel 门并检查画廊的所有者。更多信息可以查看stackoverflow.com/questions/36482737/…
    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2019-04-04
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多