laravel - Laravel 在我的路由中添加了一个额外的 can:isSuperAdmin 中间件
问题描述
Route::group([
'middleware' =>['JwtMiddleware', 'auth:api','can:isSuperAdmin'],
'prefix' => '/schools'
], function () {
Route::get('/', [SchoolController::class, 'index']);
});
我想添加一个额外的身份验证,例如只有具有 super_admin 角色的用户才能访问此端点,具有 super_admin 角色的用户的 user_id 是 1 。我怎样才能像上面一样将中间件添加到我的路线中.. 使用这个中间件的其他关系/重要代码是什么
解决方案
您需要在中间件文件夹下创建一个中间件:
<?php
namespace App\Http\Middleware;
use Closure;
class EnsureUserHasRole
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
并将此中间件注册到您的app/Http/Kernel.php
:
protected $routeMiddleware = [
// ...
'role' => \Illuminate\Auth\Middleware\EnsureUserHasRole::class,
];
您还需要hasRole()
在您的用户模型中:
public function hasRole($role)
{
switch ($role) {
case 'isSuperAdmin':
return $this->super_admin;
}
}
毕竟,您可以将其用作:
Route::group([
'middleware' => ['JwtMiddleware', 'auth:api', 'role:isSuperAdmin'],
'prefix' => '/schools'
], function () {
Route::get('/', [SchoolController::class, 'index']);
});
推荐阅读
- mongodb - 在 kubernetes 中运行 mongodb - azure aks 失败
- object-recognition - 在预加载的点云上重新定位智能手机
- javascript - 以编程方式访问 JavaScript 中的字体规范
- javascript - 将多个数组合并为单个数组
- c++ - 函数返回的未来
- javascript - JavaScript 仅适用于一个 div
- apache-nifi - 将 nifi web-api bean 注入自定义处理器
- android - 在android中制作Canvas Draggable圆圈
- sql-server - 如何在 SQL Server 中使用 bcp 运行 .sql 文件
- javascript - 具有最小弧长/宽度的 d3 v4 饼图