feat: 禁止删除 acepanel-network 内置网络

acepanel-network 由面板自身使用,误删会导致容器编排异常。后端
Remove 拦截该网络的删除请求,前端批量删除时一并将其排除。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
耗子
2026-05-14 19:38:14 +08:00
parent 5495a17748
commit db7e342a23
2 changed files with 16 additions and 1 deletions
+10
View File
@@ -2,6 +2,7 @@ package data
import (
"context"
"errors"
"fmt"
"net/netip"
"slices"
@@ -151,6 +152,15 @@ func (r *containerNetworkRepo) Remove(id string) error {
}
defer func(apiClient *client.Client) { _ = apiClient.Close() }(apiClient)
// 拦截受保护网络的删除
info, err := apiClient.NetworkInspect(context.Background(), id, client.NetworkInspectOptions{})
if err != nil {
return err
}
if info.Network.Name == "acepanel-network" {
return errors.New("cannot delete acepanel-network")
}
_, err = apiClient.NetworkRemove(context.Background(), id, client.NetworkRemoveOptions{})
return err
}
+6 -1
View File
@@ -163,7 +163,12 @@ const handlePrune = () => {
}
const handleBulkDelete = async () => {
const promises = selectedRowKeys.value.map((id: any) => container.networkRemove(id))
// 排除受保护的 acepanel-network,避免触发后端拦截
const protectedIds = new Set(
data.value?.filter((item: any) => item.name === 'acepanel-network').map((item: any) => item.id) ?? [],
)
const ids = selectedRowKeys.value.filter((id: any) => !protectedIds.has(id))
const promises = ids.map((id: any) => container.networkRemove(id))
await Promise.all(promises)
selectedRowKeys.value = []