0

根据 Laravel 8 的文档,我可以创建自定义 FormRequests 并将我的验证/授权逻辑放在那里。这适用于 和 之类的store路线update。但在真正到达路线之前,必须在update路线上按保存edit(编辑view)。

所以对于edit路线。(还)没有什么要验证的,因为这是用户将数据输入表单进行验证的地方(稍后)。但是为了决定用户是否可以访问表单 edit,我可以重用authorize()表单中方法的相同逻辑。

那么如何重用authorize()自定义的位FormRequestedit view route

public function authorize()
{
    return $this->user()->can('update', $this->comment);
}

或者没有办法做到这一点,我必须重写/复制下面的行吗?

return $this->user()->can('update', $this->comment);

4

2 回答 2

0

基本上它取决于不同的方式,您可以使用它授权方法,因为您可以根据需要直接在特定方法中调用。

public function update(Request $request, Post $post)
{
    $this->authorize('update', [$post, $request->category]);

    // The current user can update the blog post...
}
于 2021-08-10T09:49:54.650 回答
0

一种解决方案可能是创建一个 PostRequest(或任何适合您情况的名称),然后根据使用的方法处理授权和规则。虽然可能不是最佳实践,但它可以帮助减少代码混乱。

像下面的示例一样,只有POST请求会在验证中检查所需的注释,而您仍然可以访问编辑和查看路由而无需任何验证。

public function authorize()
{
    switch ($this->method()) {
        case 'GET':
            $this->user()->can('update', $this->comment);
            break;
        case 'POST':
            break;
        case 'PUT':
            break;
        case 'PATCH':
            break;
        case 'DELETE':
            break;
    }

    return true;
}

public function rules()
{
    switch ($this->method()) {
        case 'GET':
            return [];
        case 'POST':
            return [
                'comment' => 'required'
            ];
        case 'PUT':
            return [];
        case 'PATCH':
            return [];
        case 'DELETE':
            return [];
        default:
            return [];
    }
}
于 2021-08-10T09:55:18.220 回答