\App\Http\MiddlewarePermissionAuthMiddleware

接口权限校验中间件

职责:在 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'); // 资源路由自动映射

Summary

Methods
Properties
Constants
__construct()
handle()
resolvePermissionFromRoute()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
isSharedFileAccess()
$cacheService
N/A

Properties

Methods

__construct()

__construct(\App\Services\Admin\PermissionCacheService  $cacheService) : mixed

Parameters

\App\Services\Admin\PermissionCacheService $cacheService

Returns

mixed —

handle()

handle(\Illuminate\Http\Request  $request, \Closure  $next, ?string  $requiredPermission = null) : mixed

处理请求:鉴权 → 权限码解析 → 权限校验 → 放行/拒绝。

流程:① 未登录返回 401 ② 超级管理员直接放行 ③ 未指定权限标识时从路由名自动推断 ④ 解析不到权限码一律拒绝(fail-closed) ⑤ 缓存校验权限码,不通过返回 403

Parameters

\Illuminate\Http\Request $request
\Closure $next
?string $requiredPermission

Returns

mixed —

resolvePermissionFromRoute()

resolvePermissionFromRoute(\Illuminate\Http\Request  $request) : ?string

从当前路由自动推断权限标识。

规则:

  • URI 以 /api/admin/ 开头,去掉前缀后按段解析
  • 第一段为模块名,第二段为资源名
  • HTTP 方法映射操作:GET→read, POST→create, PUT/PATCH→update, DELETE→delete

示例: 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),供单元测试直接调用。

Parameters

\Illuminate\Http\Request $request

Returns

?string —

isSharedFileAccess()

isSharedFileAccess(\Illuminate\Http\Request  $request) : bool

共享文件访问放行判定:GET api/admin/files/{id}/preview|download。

仅登录态即放行(权限码层不拦截),实际可见性由文件服务 assertVisible 兜底—— 私有文件(非本人/非豁免)仍 403,放行不扩大私有文件访问面。

Parameters

\Illuminate\Http\Request $request

Returns

bool —