permission-core Auth 接入
本示例展示如何把 permission-core 接入 VextJS Auth。Vext 的认证与路由保护是分层的:
auth()负责解析 Bearer token,并填充req.auth。permission-core负责invoke + GET:/api/posts这类授权判断。- 每条路由把最终
RouteOptions.auth内联或保存为同文件const,让构建索引、运行时保护与 OpenAPI 读取同一份合同。
1. 安装
演示或测试项目可以使用 MemoryAdapter。生产环境请按 permission-core 生产部署文档选择持久化 storage adapter,并接入 permission-core 推荐的 cache-hub + monsqlize 栈。
2. 创建 permission 插件
3. 用 auth() 连接 permission-core
在 src/config/default.ts 注册中间件名:
4. 声明可静态投影的路由保护
路由索引不会执行导入或本地 helper 函数。请把每个最终保护形状保留在路由文件的同文件 const 中,让 middleware、permission、security 与 docs 合同都能在运行前完整读取:
同一资源族的路由常量可以集中放在对应 route 模块中。可复用的运行时行为仍由 permission-core-auth middleware 与 permission provider 统一承担;路由合同本身保持静态可见。
5. 用最终 options 常量保护路由
RouteOptions.auth 仍然是路由保护契约。有限静态语法会拒绝 route-options helper 调用;请使用最终内联对象或同文件最终 const。旧的 openapi.guardSecurityMap 只继续兼容 middleware-only 历史路由。
6. 在 handler 内直接 assert()
只有当某条路由需要在 handler 内做额外动态判断时,才使用 req.auth.assert():
如果 permission-core 拒绝该操作,Vext 会沿 Auth guard 路径返回 AUTH_FORBIDDEN。
7. 验证
注册 middleware 和 routes 后,请在应用自己的测试套件中验证这一接入。至少应断言:
- 认证会填充预期的 identity 和安全的 request context
- permission-core
can()会放行已授权操作并拒绝未授权操作 - 缺失、malformed、unknown credential 会返回文档说明的错误
- 被拒绝的操作中
req.auth.assert()返回AUTH_FORBIDDEN,且 OpenAPI document 声明bearerAuth