首页 > 解决方案 > Laravel 不同的中间件

问题描述

我有一个关于中间件的问题。所以现在我创建了 3 个中间件,分别称为 Admin、Office 和 User。这是客户控制器:

class CustomerController extends Controller
{


public function getAllCustomer()
{
    return Customer::get();
}

public function addNewCustomer(Request $request)
{
    $validatedData = $request->validate([
        'Title' => 'required',
        'Name' => 'required|max:255',
        'Surname' => 'required|max:255',
        'Email' => 'required',
        'Phone' => 'required',
        'Password' => 'required',
        'dateofBirth' => 'required'
    ]);

    return \app\model\Customer::create($request->all());
}


public function update (Request $request , Customer $id)
{
    $id->update($request->all());
}


public function destroy (Customer $id)
{
    $id->delete();
}

客户能够读取、创建、更新和删除。但是现在我想使用中间件,这样只有管理员才能创建/读取/更新/删除所有数据,用户只能使用自己的数据来执行此操作。所以现在我有 3 个中间件类,并将其添加到 Kernel.php:

'admin' => 'App\Http\Middleware\AdminAuthentification::class',
 'office' => 'App\Http\Middleware\OfficeAuthentification::class',
 'user' => 'App\Http\Middleware\UserAuthentification::class'

我的问题是:我需要在中间件中添加什么来添加我描述的功能?

非常感谢您的帮助!

标签: phplaravel

解决方案


实际上这是一种非常丑陋的做事方式,但无论如何......你应该结帐gates/policies或类似spatie/laravel的东西。

namespace App\Http\Middleware;
use Closure;

class UserAuthentification {

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    if(check user type){
       //allowed
    }
    else{
        //forbidden
        //you can abort
        abort(403);

    }

    $response = $next($request);

    return $response;
}

}

推荐阅读