diff --git a/app/Http/Controllers/Api/ServerResourceController.php b/app/Http/Controllers/Api/ServerResourceController.php index 8ef5b34..fbcf571 100644 --- a/app/Http/Controllers/Api/ServerResourceController.php +++ b/app/Http/Controllers/Api/ServerResourceController.php @@ -81,13 +81,38 @@ class ServerResourceController extends Controller $resourceIds = collect(); foreach ($allPermissions as $permission) { - if (! str_starts_with((string) $permission->name, 'resource.servers.use.')) { + $permissionName = (string) $permission->name; + if (! str_starts_with($permissionName, 'resource.servers.use.')) { continue; } $description = (string) ($permission->description ?? ''); if (preg_match('/资源ID[::]\s*(\d+)/u', $description, $matches) === 1) { $resourceIds->push((int) $matches[1]); + continue; + } + + $nameParts = explode('.', $permissionName); + if (count($nameParts) < 6) { + continue; + } + + $serverName = trim((string) ($nameParts[3] ?? '')); + $resourceName = trim((string) ($nameParts[4] ?? '')); + if ($serverName === '' || $resourceName === '') { + continue; + } + + $matchedIds = ServerResource::query() + ->from('server_resources as resource') + ->join('server_resources as server', 'server.id', '=', 'resource.parent_id') + ->where('server.name', $serverName) + ->where('resource.name', $resourceName) + ->pluck('resource.id') + ->map(fn ($id): int => (int) $id) + ->all(); + if (! empty($matchedIds)) { + $resourceIds = $resourceIds->merge($matchedIds); } }