From c8efe3d1e6885b16f9e5252b6f71a710272c39a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Mon, 13 Oct 2025 18:49:53 +0800 Subject: [PATCH] fix(keystone): distribute permissions when the organization changes (#23503) --- pkg/cloudcommon/db/standalone_anon.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/cloudcommon/db/standalone_anon.go b/pkg/cloudcommon/db/standalone_anon.go index bc6f023149..279187fa09 100644 --- a/pkg/cloudcommon/db/standalone_anon.go +++ b/pkg/cloudcommon/db/standalone_anon.go @@ -16,6 +16,8 @@ package db import ( "context" + "crypto/md5" + "fmt" "strings" "yunion.io/x/jsonutils" @@ -52,6 +54,9 @@ type SStandaloneAnonResourceBase struct { // 是否是模拟资源, 部分从公有云上同步的资源并不真实存在, 例如宿主机 // list 接口默认不会返回这类资源,除非显示指定 is_emulate=true 过滤参数 IsEmulated bool `nullable:"false" default:"false" list:"admin" create:"admin_optional" json:"is_emulated"` + + // 用以组织架构变更通知其他服务权限变更 + OrgNodeMd5 string `width:"32" charset:"ascii" nullable:"true"` } func (model *SStandaloneAnonResourceBase) BeforeInsert() { @@ -365,6 +370,11 @@ func (model *SStandaloneAnonResourceBase) SetOrganizationMetadataAll(ctx context return errors.Wrap(err, "SetAllOrganization") } } + Update(model, func() error { + model.OrgNodeMd5 = fmt.Sprintf("%x", md5.Sum([]byte(jsonutils.Marshal(meta).String()))) + return nil + }) + // 避免加入组织架构后,项目所在的层级会移除此项目 //{ // userTags := make(map[string]interface{})