From 350f4e4db95231990b0671ffbacd9f064bbea5a2 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 24 Oct 2018 12:00:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9A=E4=BF=9D=E6=8A=A4?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=BB=98=E8=AE=A4=E5=88=9B=E5=BB=BA=E7=9A=84?= =?UTF-8?q?default=E8=B5=84=E6=BA=90=EF=BC=8C=E4=B8=8D=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/cloudregions.go | 3 +++ pkg/compute/models/secgroups.go | 11 +++++++++++ pkg/compute/models/vpcs.go | 3 +++ pkg/httperrors/errors.go | 5 +++++ pkg/httperrors/httperrors.go | 4 ++++ 5 files changed, 26 insertions(+) diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index 3d0e2e9a53..7b84f1ca42 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -57,6 +57,9 @@ func (self *SCloudregion) ValidateDeleteCondition(ctx context.Context) error { if self.GetZoneCount() > 0 || self.GetVpcCount() > 0 { return httperrors.NewNotEmptyError("not empty cloud region") } + if self.Id == "default" { + return httperrors.NewProtectedResourceError("not allow to delete default cloud region") + } return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx) } diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index bdba6dddf3..68fcd19623 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -367,3 +367,14 @@ func (manager *SSecurityGroupManager) InitializeData() error { } return nil } + +func (self *SSecurityGroup) ValidateDeleteCondition(ctx context.Context) error { + cnt := self.GetGuestsCount() + if cnt > 0 { + return httperrors.NewNotEmptyError("the security group is in use") + } + if self.Id == "default" { + return httperrors.NewProtectedResourceError("not allow to delete default security group") + } + return self.SSharableVirtualResourceBase.ValidateDeleteCondition(ctx) +} diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 67fd0cbc82..2ec8e1bd24 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -78,6 +78,9 @@ func (self *SVpc) ValidateDeleteCondition(ctx context.Context) error { if self.GetNetworkCount() > 0 { return httperrors.NewNotEmptyError("VPC not empty") } + if self.Id == "default" { + return httperrors.NewProtectedResourceError("not allow to delete default vpc") + } return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx) } diff --git a/pkg/httperrors/errors.go b/pkg/httperrors/errors.go index 662b59ec0e..da247ea7a8 100644 --- a/pkg/httperrors/errors.go +++ b/pkg/httperrors/errors.go @@ -188,3 +188,8 @@ func NewGeneralError(err error) *httputils.JSONClientError { return NewInternalServerError(err.Error()) } } + +func NewProtectedResourceError(msg string, params ...interface{}) *httputils.JSONClientError { + msg, err := errorMessage(msg, params) + return NewJsonClientError(403, "ProtectedResourceError(", msg, err) +} diff --git a/pkg/httperrors/httperrors.go b/pkg/httperrors/httperrors.go index 84dc0d3216..4974d2f01e 100644 --- a/pkg/httperrors/httperrors.go +++ b/pkg/httperrors/httperrors.go @@ -90,3 +90,7 @@ func TenantNotFoundError(w http.ResponseWriter, msg string, params ...interface{ func OutOfQuotaError(w http.ResponseWriter, msg string, params ...interface{}) { JsonClientError(w, NewOutOfQuotaError(msg, params...)) } + +func ProtectedResourceError(w http.ResponseWriter, msg string, params ...interface{}) { + JsonClientError(w, NewProtectedResourceError(msg, params...)) +}