fix(admin-frontend): 修复节点权限组保存与协议默认值

统一将节点编辑和批量修改的 group_ids、route_ids
序列化为字符串 ID,避免保存权限组后订阅侧无法命中节点

后端新增 whereGroupId 兼容历史字符串与数字 JSON 值,
并补齐 TUIC 版本、ALPN 选项及 AnyTLS 默认 Padding 配置

docs: 新增 HelloAGENTS 通用与工作流避坑指南
This commit is contained in:
yinjianm
2026-04-27 23:03:57 +08:00
parent c64badfc23
commit 30c2f655e7
16 changed files with 1096 additions and 33 deletions
+40
View File
@@ -135,6 +135,46 @@ class Server extends Model
'machine_id' => 'integer',
];
private function normalizeJsonIdList($value): array
{
if (is_string($value)) {
$decoded = json_decode($value, true);
$value = json_last_error() === JSON_ERROR_NONE ? $decoded : [$value];
}
if (!is_array($value)) {
return [];
}
return array_values(array_unique(array_filter(array_map(
fn ($item) => trim((string) $item),
$value
), fn ($item) => $item !== '')));
}
public function setGroupIdsAttribute($value): void
{
$this->attributes['group_ids'] = json_encode($this->normalizeJsonIdList($value));
}
public function setRouteIdsAttribute($value): void
{
$this->attributes['route_ids'] = json_encode($this->normalizeJsonIdList($value));
}
public function scopeWhereGroupId($query, $groupId)
{
$normalized = trim((string) $groupId);
return $query->where(function ($query) use ($normalized) {
$query->whereJsonContains('group_ids', $normalized);
if (ctype_digit($normalized)) {
$query->orWhereJsonContains('group_ids', (int) $normalized);
}
});
}
private const MULTIPLEX_CONFIGURATION = [
'multiplex' => [
'type' => 'object',