\Tests\FeaturePermissionCorrespondenceTest

权限接口对应

被测对象:admin 路由 → 生效权限码 → 权限目录 三方闭环 守护约定:路由码 ⊆ 目录码(接口存在即权限可见可授);目录码均有路由使用或 open:* 公开端点登记;权限码命名格式统一。

Summary

Methods
Properties
Constants
test_every_admin_route_permission_code_exists_in_catalog()
test_catalog_codes_all_used_by_routes_or_open()
test_permission_code_format()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
No protected properties found
N/A
seedCatalog()
adminRouteCodes()
No private properties found
N/A

Methods

test_every_admin_route_permission_code_exists_in_catalog()

test_every_admin_route_permission_code_exists_in_catalog() : void

每个 admin 路由的生效权限码必须已登记权限目录——「接口存在但权限看不到」即爆炸点。

test_catalog_codes_all_used_by_routes_or_open()

test_catalog_codes_all_used_by_routes_or_open() : void

目录码不得为死码:每个 sys: 码至少被一个 admin 路由使用(open:* 为公开端点登记码,豁免)。

test_permission_code_format()

test_permission_code_format() : void

权限码命名格式统一:sys:{模块}:{动作}(子资源专属码可三段,如 sys:user:dept:assign) 或 open:{线}:{动作}(小写 snake)。

requireRedis()

requireRedis() : void

Redis 依赖探针:直连 Redis 的测试(限流/会话/验证码)在无 Redis 环境(如 CI) 跳过而非失败——其余用例不受影响。CI 可设 TEST_REQUIRE_REDIS=1 强制模式: Redis 不可达即失败而非跳过,安全回归套件不允许静默消失。

buildCacheRegistry()

buildCacheRegistry(array  $items) : void

建缓存注册表最小 schema(td_sys_cache)并灌入注册项。

测试跑 sqlite :memory:,生产迁移含 PostgreSQL 专属 DDL 跑不通(DataScopeServiceTest 同因自建 schema); 而 CacheManager::registry() 现已从数据库表读取——凡走注册表的测试(remember/get/key/失效推导) 必须在 setUp 先调用本方法,否则注册表为空、remember 未登记名会走「自动登记」路径。

Parameters

array $items

seedCatalog()

seedCatalog() : void

权限目录播种(菜单 → 权限,与运行库一致的数据源)

adminRouteCodes()

adminRouteCodes() : array

收集 admin 路由的生效权限码(显式 middleware 优先,否则按中间件推断规则)。

Returns

array —