php - 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'
我的问题是:我需要在中间件中添加什么来添加我描述的功能?
非常感谢您的帮助!
解决方案
实际上这是一种非常丑陋的做事方式,但无论如何......你应该结帐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;
}
}
推荐阅读
- reactjs - 单个网页上的多个反应应用程序的多个 redux 实例
- java - 扩展 Serializable Interface 的 POJO 类也称为 POJO 类?
- html - Flexbox / Bootstrap 4 - 将元素拉伸到父元素的剩余高度
- ios - 快速从表视图问题中搜索动态数据问题
- google-sheets - Google 表格 - 通过 importrange 链接并插入新行
- android - 为底部导航栏设置选中和未选中状态不起作用 [Android]
- xml - 每个不工作的 xslt
- android - 将视图添加到 flexboxlayout
- scala - Kafka Spark Stream 直接保存到 Redis
- rx-java - Spring boot graphql-java,订阅和流监听器