mirror of
https://github.com/tnb-labs/panel.git
synced 2026-08-30 17:05:19 +08:00
feat: 禁止删除 acepanel-network 内置网络
acepanel-network 由面板自身使用,误删会导致容器编排异常。后端 Remove 拦截该网络的删除请求,前端批量删除时一并将其排除。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
Reference in New Issue
Block a user