mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
metadata permission
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user