故障排查
排查时先看错误 code 和 details.kind,不要依赖 message 文案。PermissionCore 错误是结构化的,还可能包含 retryable、committed 和 operationId。
最小诊断顺序
这三个读取不会修复状态。先根据证据定位层级,再调用相应管理写入或部署恢复;不要在诊断代码中自动追加 allow。
按症状快速定位
安装与初始化
PermissionCore 构造函数必须接收包含 monsqlize 的配置对象,不支持无参数构造,也没有单独的存储适配器。
Scope、身份与决策
cannot(action, resource) 返回的是 !can(action, resource)。结果为 true 并不能证明存在显式 deny 规则。
数据、菜单与并发
管理写入采用乐观并发并记录审计。不能用任意当前数字替换 expectedRevision 来“自动重试”,必须先重新加载表单状态。
缓存与 Vext 恢复
缓存默认旁路。启用后若健康状态降级,权限读取会在可行时回退数据库,并在 health().cache 记录事件。应恢复 MonSQLize 缓存后端并监控失效结果,不要再给 permission-core 接入第二个缓存客户端。
受保护 Vext 路由没有可信认证上下文时,插件返回 VEXT_AUTH_REQUIRED。启动后若路由 manifest 发生变化,会返回 VEXT_ROUTE_RESTART_REQUIRED,所有路由持续响应 503,直到进程用一致 manifest 重启;这是有意的默认拒绝行为。
生产诊断应保留 HTTP request ID、权限 operationId、错误码、details 判别字段、租户安全的 scope hash 和当前 health() 快照。进一步处理请阅读生产运维。