fix(服务器资源): 修复用户组继承权限下资源不可见

资源可见性计算新增对权限名的反向解析,支持 resource.servers.use.{服务器名}.{资源名} 形式并映射资源ID。
This commit is contained in:
Boen_Shi 2026-04-29 14:34:35 +08:00
parent acba3c9f62
commit 58e44b5e61

View File

@ -81,13 +81,38 @@ class ServerResourceController extends Controller
$resourceIds = collect(); $resourceIds = collect();
foreach ($allPermissions as $permission) { 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; continue;
} }
$description = (string) ($permission->description ?? ''); $description = (string) ($permission->description ?? '');
if (preg_match('/资源ID[:]\s*(\d+)/u', $description, $matches) === 1) { if (preg_match('/资源ID[:]\s*(\d+)/u', $description, $matches) === 1) {
$resourceIds->push((int) $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);
} }
} }