fix(服务器资源): 修复用户组继承权限下资源不可见
资源可见性计算新增对权限名的反向解析,支持 resource.servers.use.{服务器名}.{资源名} 形式并映射资源ID。
This commit is contained in:
parent
acba3c9f62
commit
58e44b5e61
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user