From 6eacd8196c26239a6c53a6192d19f4138edb17cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 20 Mar 2019 16:53:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E6=88=AA=E6=96=AD=E7=B3=BB=E7=BB=9Fme?= =?UTF-8?q?tadata=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/metadata.go | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/pkg/cloudcommon/db/metadata.go b/pkg/cloudcommon/db/metadata.go index bd9589d30e..42504cbb76 100644 --- a/pkg/cloudcommon/db/metadata.go +++ b/pkg/cloudcommon/db/metadata.go @@ -18,13 +18,13 @@ import ( ) const ( - SYSTEM_ADMIN_PREFIX = "_" + SYSTEM_ADMIN_PREFIX = "__sys_" + SYS_TAG_PREFIX = "__" CLOUD_TAG_PREFIX = "ext:" USER_TAG_PREFIX = "user:" TAG_DELETE_RANGE_USER = "user" TAG_DELETE_RANGE_CLOUD = "cloud" - TAG_DELETE_RANGE_SYS = "sys" TAG_DELETE_RANGE_ALL = "all" ) @@ -121,7 +121,7 @@ func (manager *SMetadataManager) ListItemFilter(ctx context.Context, q *sqlchemy if len(conditions) > 0 { q = q.Filter(sqlchemy.OR(conditions...)) } - for args, prefix := range map[string]string{"sys_meta": SYSTEM_ADMIN_PREFIX, "cloud_meta": CLOUD_TAG_PREFIX, "user_meta": USER_TAG_PREFIX} { + for args, prefix := range map[string]string{"sys_meta": SYS_TAG_PREFIX, "cloud_meta": CLOUD_TAG_PREFIX, "user_meta": USER_TAG_PREFIX} { if jsonutils.QueryBoolean(query, args, false) { q = q.Filter(sqlchemy.Startswith(q.Field("key"), prefix)) } @@ -225,7 +225,7 @@ func (manager *SMetadataManager) SetValues(ctx context.Context, obj IModel, stor changes := make([]sMetadataChange, 0) for key, value := range store { - if strings.HasPrefix(key, SYSTEM_ADMIN_PREFIX) && (userCred == nil || !IsAdminAllowGetSpec(userCred, obj, "metadata")) { + if strings.HasPrefix(key, SYS_TAG_PREFIX) && (userCred == nil || !IsAdminAllowGetSpec(userCred, obj, "metadata")) { return nil, httperrors.NewForbiddenError("Ordinary users can't set the tags that begin with an underscore") } @@ -288,14 +288,12 @@ func (manager *SMetadataManager) SetAll(ctx context.Context, obj IModel, store m } records := []SMetadata{} - q := manager.Query().Equals("id", idStr) + q := manager.Query().Equals("id", idStr).NotLike("key", SYS_TAG_PREFIX+"%") switch delRange { case TAG_DELETE_RANGE_USER: q = q.Like("key", USER_TAG_PREFIX+"%") case TAG_DELETE_RANGE_CLOUD: q = q.Like("key", CLOUD_TAG_PREFIX+"%") - case TAG_DELETE_RANGE_SYS: - q = q.Like("key", SYSTEM_ADMIN_PREFIX+"%") } q = q.Filter(sqlchemy.NOT(sqlchemy.In(q.Field("key"), keys))) if err := FetchModelObjects(manager, q, &records); err != nil { @@ -327,15 +325,8 @@ func (manager *SMetadataManager) GetAll(obj IModel, keys []string, userCred mccl } ret := make(map[string]string) for _, rec := range records { - if len(rec.Value) > 0 { - if strings.HasPrefix(rec.Key, SYSTEM_ADMIN_PREFIX) { - if userCred != nil && IsAdminAllowGetSpec(userCred, obj, "metadata") { - key := rec.Key[len(SYSTEM_ADMIN_PREFIX):] - ret[key] = rec.Value - } - } else { - ret[rec.Key] = rec.Value - } + if len(rec.Value) > 0 || strings.HasPrefix(rec.Key, USER_TAG_PREFIX) { + ret[rec.Key] = rec.Value } } return ret, nil