fix: policy update description panic (#19508)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2024-02-20 09:28:32 +08:00
committed by GitHub
co-authored by Qiu Jian
parent 5c5d66fffe
commit 4ff0c1c1eb
+20 -11
View File
@@ -437,23 +437,28 @@ func (policy *SPolicy) ValidateUpdateData(ctx context.Context, userCred mcclient
}
switch input.TagUpdatePolicy {
case api.TAG_UPDATE_POLICY_REMOVE:
nodeIds := make([]string, 0)
for i := range policy.OrgNodeId {
if !utils.IsInArray(policy.OrgNodeId[i], input.OrgNodeId) {
nodeIds = append(nodeIds, policy.OrgNodeId[i])
} else {
tagChanged = true
if len(input.OrgNodeId) > 0 {
nodeIds := make([]string, 0)
for i := range policy.OrgNodeId {
if !utils.IsInArray(policy.OrgNodeId[i], input.OrgNodeId) {
nodeIds = append(nodeIds, policy.OrgNodeId[i])
} else {
tagChanged = true
}
}
input.OrgNodeId = nodeIds
}
input.OrgNodeId = nodeIds
case api.TAG_UPDATE_POLICY_REPLACE:
// do nothing
tagChanged = true
default:
for i := range policy.OrgNodeId {
if !utils.IsInArray(policy.OrgNodeId[i], input.OrgNodeId) {
input.OrgNodeId = append(input.OrgNodeId, policy.OrgNodeId[i])
tagChanged = true
// add
if len(input.OrgNodeId) > 0 {
for i := range policy.OrgNodeId {
if !utils.IsInArray(policy.OrgNodeId[i], input.OrgNodeId) {
input.OrgNodeId = append(input.OrgNodeId, policy.OrgNodeId[i])
tagChanged = true
}
}
}
}
@@ -489,6 +494,10 @@ func (policy *SPolicy) ValidateUpdateData(ctx context.Context, userCred mcclient
}
}
if input.Blob == nil {
input.Blob = policy.Blob
}
p, err := rbacutils.DecodePolicyData(domainTags, projectTags, objectTags, input.Blob)
if err != nil {
return input, httperrors.NewInputParameterError("fail to decode policy data")