\Tests\FeatureUserPersonalPermissionTest

个人权限直授

被测对象:UserConfigService(syncUserPermissions/getUserPermissionIds/permissionCatalog)与 PermissionCacheService 守护约定:个人权限与角色权限并集生效,仅按钮/接口权限(type=2/3)、菜单权限不授; 目标可见性、超管用户只读、委派上界(非超管只能授予自身已持有的权限码)、 覆盖式同步不残留旧行。

Summary

Methods
Properties
Constants
test_operator_can_grant_permission_they_hold()
test_personal_and_role_permissions_union()
test_operator_cannot_grant_permission_they_lack()
test_menu_permission_rejected()
test_super_target_is_read_only()
test_sync_overwrites_previous_grants()
test_super_operator_bypasses_bound()
test_permission_catalog_tree_filters_and_prunes()
test_permission_isolation_no_cross_user_leak()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
No protected properties found
N/A
No private methods found
$operator
$target
$ownPerm
$extraPerm
$menuPerm
N/A

Properties

$operator

$operator : \App\Models\SysUser

Type

SysUser

$target

$target : \App\Models\SysUser

Type

SysUser

$ownPerm

$ownPerm : \App\Models\SysPermission

Type

SysPermission

$extraPerm

$extraPerm : \App\Models\SysPermission

Type

SysPermission

$menuPerm

$menuPerm : \App\Models\SysPermission

Type

SysPermission

Methods

test_operator_can_grant_permission_they_hold()

test_operator_can_grant_permission_they_hold() : void

验证操作者可授予自身已持有的权限码。

test_personal_and_role_permissions_union()

test_personal_and_role_permissions_union() : void

验证个人权限与角色权限并集生效。

test_operator_cannot_grant_permission_they_lack()

test_operator_cannot_grant_permission_they_lack() : void

验证操作者不可授予自身未持有的权限码(403)。

test_menu_permission_rejected()

test_menu_permission_rejected() : void

验证菜单类权限被拒(个人权限仅按钮/接口)。

test_super_target_is_read_only()

test_super_target_is_read_only() : void

验证超管用户的个人权限只读(403)。

test_sync_overwrites_previous_grants()

test_sync_overwrites_previous_grants() : void

验证覆盖式同步不残留旧行(空集清空个人权限)。

test_super_operator_bypasses_bound()

test_super_operator_bypasses_bound() : void

验证超管操作者绕过委派上界。

test_permission_catalog_tree_filters_and_prunes()

test_permission_catalog_tree_filters_and_prunes() : void

个人权限目录(V6.3):递归树,仅按钮/接口权限、停用权限剔除、空节点剪枝

test_permission_isolation_no_cross_user_leak()

test_permission_isolation_no_cross_user_leak() : void

隔离性:他人角色/个人权限一律不进入本用户权限集——不是本人的全部 NO

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

setUp()

setUp() : void