为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 CRUD 之前检查用户是否拥有资源

如何在 CRUD 之前检查用户是否拥有资源

PHP
临摹微笑 2022-01-24 10:50:11
我正在尝试清理我的控制器操作,但我不确定如何最好地进行。我有一个编辑操作,我通过路由模型绑定接收资源。我想在修改之前检查用户是否拥有此资源,如果没有,则重定向到通用索引路由public function show(Document $document){    //  This works fine, but I've repeated this for all other     //  actions where user views or modifies resource. How do    //  I share this functionality with view/show/delete?    if ($document->user_id !== Auth::id()) {        return redirect('documents');    }    return view('documents.show', compact('document'));}如何在不为每个操作(例如显示/编辑/查看)重复这些行的情况下实现此行为?谢谢!
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

您可以制作一个中间件来检查经过身份验证的用户 id 是否等于方法$request->document->user_id中的handle,并在控制器的构造方法中应用中间件(显示、查看、删除)


这是一个示例实现


php artisan make:middleware DocumentsOwnerShip

<?php


namespace App\Http\Middleware;


use Closure;


class DocumentsOwnerShip

{

    public function handle($request, Closure $next)

    {

        if ($request->document->user_id !== auth()->id()) {

            return redirect('documents');

        }

        return $next($request);

    }

}

在你的控制器中


<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use App\Http\Middleware\DocumentsOwnerShip;


class DocumentsController extends Controller

{

    public function __construct()

    {

        $this->middleware(DocumentsOwnerShip::class)->only(['view', 'show', 'delete']);

    }


    public function show(Document $document)

    {

        return view('documents.show', compact('document'));

    }

}


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信