From 58e44b5e6129bb682afd469136d721321ad7be84 Mon Sep 17 00:00:00 2001 From: Boen_Shi Date: Wed, 29 Apr 2026 14:34:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=B5=84?= =?UTF-8?q?=E6=BA=90):=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7=E7=BB=84?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E6=9D=83=E9=99=90=E4=B8=8B=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 资源可见性计算新增对权限名的反向解析,支持 resource.servers.use.{服务器名}.{资源名} 形式并映射资源ID。 --- .../Api/ServerResourceController.php | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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); } }