$cacheService
$cacheService : \App\Services\Admin\PermissionCacheService
接口权限校验中间件
职责:在 AdminAuthMiddleware 之后执行,基于 Redis 缓存的用户权限码校验当前请求 是否拥有路由绑定的权限标识;超级管理员(is_super = 1)自动放行。
┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 构造与注入 __construct 分区 2 · 请求处理 handle 分区 3 · 权限码推断 resolvePermissionFromRoute(静态纯函数) └────────────────────────────────────────────────────────────┘
使用方式: Route::get('user-configs', [UserConfigController::class, 'index'])->middleware('permission:sys:user:read'); Route::apiResource('user-configs', UserConfigController::class)->middleware('permission:sys:user'); // 资源路由自动映射
$cacheService : \App\Services\Admin\PermissionCacheService
handle(\Illuminate\Http\Request $request, \Closure $next, ?string $requiredPermission = null) : mixed
处理请求:鉴权 → 权限码解析 → 权限校验 → 放行/拒绝。
流程:① 未登录返回 401 ② 超级管理员直接放行 ③ 未指定权限标识时从路由名自动推断 ④ 解析不到权限码一律拒绝(fail-closed) ⑤ 缓存校验权限码,不通过返回 403
| \Illuminate\Http\Request | $request | |
| \Closure | $next | |
| ?string | $requiredPermission |
resolvePermissionFromRoute(\Illuminate\Http\Request $request) : ?string
从当前路由自动推断权限标识。
规则:
示例: GET /api/admin/user-configs → sys:user:read POST /api/admin/user-configs → sys:user:create PUT /api/admin/user-configs/1 → sys:user:update DELETE /api/admin/user-configs/1 → sys:user:delete PUT /api/admin/roles/1/menus → sys:role:update(角色分配本质是改角色) GET /api/admin/depts/1/posts → sys:post:read(部门岗位目录只读视图) PUT /api/admin/posts/1/scope → sys:post:update(岗位数据范围,V6.2) PUT /api/admin/user-configs/1/depts → sys:user:dept:assign(用户任职同步) GET /api/admin/user-configs/1/depts → sys:user:read(任职列表只读) PUT /api/admin/user-configs/1/scope → sys:user:scope:assign(个人数据范围,V6.2) PUT /api/admin/user-configs/1/permissions → sys:user:permission:assign(个人权限,V6.3) GET /api/admin/user-configs/1/permissions → sys:user:read(个人权限列表只读)
public static:纯推断逻辑(仅依赖 Request),供单元测试直接调用。
| \Illuminate\Http\Request | $request |