metadata permission

This commit is contained in:
ioito
2019-07-09 22:43:33 +08:00
parent 0f0a0902bc
commit 7c694b17d3
2 changed files with 6 additions and 12 deletions
-3
View File
@@ -279,9 +279,6 @@ func (manager *SMetadataManager) SetValues(ctx context.Context, obj IModel, stor
changes := make([]sMetadataChange, 0)
for key, value := range store {
if strings.HasPrefix(key, SYS_TAG_PREFIX) && (userCred == nil || !IsAllowGetSpec(rbacutils.ScopeSystem, userCred, obj, "metadata")) {
return nil, httperrors.NewForbiddenError("Ordinary users can't set the tags that begin with an underscore")
}
valStr := stringutils.Interface2String(value)
valStrLower := strings.ToLower(valStr)
+6 -9
View File
@@ -17,6 +17,7 @@ package db
import (
"context"
"fmt"
"strings"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -238,18 +239,10 @@ func (model *SStandaloneResourceBase) GetMetadataJson(key string, userCred mccli
}
func (model *SStandaloneResourceBase) SetMetadata(ctx context.Context, key string, value interface{}, userCred mcclient.TokenCredential) error {
if Metadata.IsSystemAdminKey(key) && !IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "metadata") {
return httperrors.NewNotSufficientPrivilegeError("cannot set system key")
}
return Metadata.SetValue(ctx, model, key, value, userCred)
}
func (model *SStandaloneResourceBase) SetAllMetadata(ctx context.Context, dictstore map[string]interface{}, userCred mcclient.TokenCredential) error {
for k := range dictstore {
if Metadata.IsSystemAdminKey(k) && !IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "metadata") {
return httperrors.NewNotSufficientPrivilegeError("not allow to set system key %s", k)
}
}
return Metadata.SetValuesWithLog(ctx, model, dictstore, userCred)
}
@@ -305,6 +298,10 @@ func (model *SStandaloneResourceBase) PerformMetadata(ctx context.Context, userC
}
dictStore := make(map[string]interface{})
for k, v := range dictMap {
// 已双下滑线开头的metadata是系统内置,普通用户不可添加,只能查看
if strings.HasPrefix(k, SYS_TAG_PREFIX) && (userCred == nil || !IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "metadata")) {
return nil, httperrors.NewForbiddenError("not allow to set system key, please remove the underscore at the beginning")
}
dictStore[k], _ = v.GetString()
}
err = model.SetAllMetadata(ctx, dictStore, userCred)
@@ -326,7 +323,7 @@ func (model *SStandaloneResourceBase) PerformUserMetadata(ctx context.Context, u
}
dictStore := make(map[string]interface{})
for k, v := range dictMap {
dictStore["user:"+k], _ = v.GetString()
dictStore[USER_TAG_PREFIX+k], _ = v.GetString()
}
err = model.SetUserMetadataValues(ctx, dictStore, userCred)
return nil, err