$actions) { // 检查控制器是否存在 if (!isset($allPermissions[$controller])) { return false; } if (!is_array($actions)) { return false; } // 检查操作是否存在 foreach ($actions as $action) { if (!isset($allPermissions[$controller]['actions'][$action])) { return false; } } } return true; } /** * 格式化权限为树形结构(用于前端显示) */ public static function formatPermissionsToTree(): array { $permissions = self::getAllPermissions(); $tree = []; foreach ($permissions as $controller => $config) { $controllerNode = [ 'id' => $controller, 'title' => $config['name'], 'spread' => false, 'children' => [] ]; foreach ($config['actions'] as $action => $actionName) { $controllerNode['children'][] = [ 'id' => $controller . '_' . $action, 'title' => $actionName, 'controller' => $controller, 'action' => $action ]; } $tree[] = $controllerNode; } return $tree; } /** * 将用户权限格式化为前端可用的格式 */ public static function formatUserPermissions($userPermissions): array { $formatted = []; if (!is_array($userPermissions)) { return $formatted; } foreach ($userPermissions as $controller => $actions) { if (is_array($actions)) { foreach ($actions as $action) { $formatted[] = $controller . '_' . $action; } } } return $formatted; } /** * 将前端提交的权限格式转换为标准格式 */ public static function parsePermissionsFromFrontend($permissions): array { $parsed = []; if (!is_array($permissions)) { return $parsed; } foreach ($permissions as $permission) { if (strpos($permission, '_') !== false) { [$controller, $action] = explode('_', $permission, 2); if (!isset($parsed[$controller])) { $parsed[$controller] = []; } if (!in_array($action, $parsed[$controller])) { $parsed[$controller][] = $action; } } } return $parsed; } /** * 合并权限 */ public static function mergePermissions($permissions1, $permissions2): array { $merged = $permissions1; foreach ($permissions2 as $controller => $actions) { if (!isset($merged[$controller])) { $merged[$controller] = []; } $merged[$controller] = array_unique(array_merge($merged[$controller], $actions)); } return $merged; } /** * 检查权限包含关系 */ public static function hasPermission($userPermissions, $controller, $action): bool { return isset($userPermissions[$controller]) && is_array($userPermissions[$controller]) && in_array($action, $userPermissions[$controller]); } /** * 获取用户所有可访问的控制器 */ public static function getUserAccessibleControllers($userPermissions): array { return array_keys($userPermissions); } /** * 获取控制器的所有可访问操作 */ public static function getControllerAccessibleActions($userPermissions, $controller): array { return $userPermissions[$controller] ?? []; } }