From cbf1818e5c046808468cd4c0a1266e8dceb1a24d Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Fri, 24 Apr 2020 19:10:56 +0800 Subject: [PATCH] fix: code autogen issues --- Makefile | 4 +- cmd/climc/shell/groups.go | 25 +++++ pkg/apis/compute/cloudaccount.go | 2 +- pkg/apis/identity/input.go | 21 ++++- pkg/apis/input.go | 38 +++++++- pkg/apis/output.go | 2 +- .../db/enabledstatusdomainresource.go | 2 + .../db/enabledstatusinfrasresource.go | 2 + pkg/cloudcommon/db/enabledstatusstandalone.go | 2 + pkg/cloudcommon/db/infraresource.go | 6 +- pkg/cloudcommon/db/sharablebase.go | 8 +- pkg/cloudcommon/db/sharablevirtual.go | 4 +- pkg/cloudcommon/db/standalone.go | 91 +++++++++---------- pkg/cloudcommon/db/statusbase.go | 1 + pkg/cloudcommon/db/statusdomainresource.go | 1 + pkg/cloudcommon/db/statusinfrasresource.go | 1 + pkg/cloudcommon/db/statusstandalone.go | 1 + pkg/compute/models/cloudaccounts.go | 4 +- pkg/compute/models/cloudprovider_quotas.go | 1 + pkg/compute/models/cloudprovidercapacities.go | 1 + pkg/compute/models/guest_template.go | 2 +- pkg/compute/models/hosts.go | 4 +- pkg/compute/models/instance_snapshot_joint.go | 2 + .../models/loadbalancerawscachedlbb.go | 1 + .../models/loadbalancerawscachedlbbg.go | 1 + pkg/compute/models/loadbalancercachedacls.go | 1 + .../models/loadbalancercachedcertificates.go | 1 + .../models/loadbalancerhuaweicachedlbb.go | 1 + .../models/loadbalancerhuaweicachedlbbg.go | 1 + .../models/loadbalancerqcloudcachedlbb.go | 1 + .../models/loadbalancerqcloudcachedlbbg.go | 1 + pkg/compute/models/storages.go | 4 +- pkg/compute/models/vcenters.go | 1 + pkg/image/models/image_guest.go | 2 +- pkg/image/models/images.go | 7 +- pkg/keystone/models/assignments.go | 1 + pkg/keystone/models/configs.go | 1 + pkg/keystone/models/federated_user.go | 1 + pkg/keystone/models/groups.go | 86 ++++++++++++++++-- pkg/keystone/models/id_mappings.go | 1 + pkg/keystone/models/identity_provider.go | 3 + pkg/keystone/models/localusers.go | 1 + pkg/keystone/models/passwords.go | 1 + pkg/keystone/models/policies.go | 6 +- pkg/keystone/models/projects.go | 18 +--- pkg/keystone/models/roles.go | 6 +- pkg/keystone/models/users.go | 31 +++---- 47 files changed, 273 insertions(+), 130 deletions(-) diff --git a/Makefile b/Makefile index a19d2f8892..377d156af1 100644 --- a/Makefile +++ b/Makefile @@ -291,9 +291,11 @@ gen-swagger: gen-swagger-check $(ROOT_DIR)/scripts/codegen.py swagger-code $(ROOT_DIR)/scripts/codegen.py swagger-yaml -swagger-serve: gen-model-api gen-swagger +swagger-serve-only: $(ROOT_DIR)/scripts/codegen.py swagger-serve +swagger-serve: gen-model-api gen-swagger swagger-serve-only + swagger-site: gen-model-api gen-swagger $(ROOT_DIR)/scripts/codegen.py swagger-site diff --git a/cmd/climc/shell/groups.go b/cmd/climc/shell/groups.go index 216e8dee07..2bd33e197d 100644 --- a/cmd/climc/shell/groups.go +++ b/cmd/climc/shell/groups.go @@ -224,4 +224,29 @@ func init() { printObject(sp) return nil }) + + type GroupAddUsersOptions struct { + GROUP string `help:"group Id or Name" json:"-"` + USER []string `help:"list of user id or name" json:"user"` + } + R(&GroupAddUsersOptions{}, "group-add-users", "Add users into group", + func(s *mcclient.ClientSession, args *GroupAddUsersOptions) error { + params := jsonutils.Marshal(args) + result, err := modules.Groups.PerformAction(s, args.GROUP, "add-users", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + R(&GroupAddUsersOptions{}, "group-remove-users", "Add users into group", + func(s *mcclient.ClientSession, args *GroupAddUsersOptions) error { + params := jsonutils.Marshal(args) + result, err := modules.Groups.PerformAction(s, args.GROUP, "remove-users", params) + if err != nil { + return err + } + printObject(result) + return nil + }) } diff --git a/pkg/apis/compute/cloudaccount.go b/pkg/apis/compute/cloudaccount.go index 6d15a1b4f4..02bf0e5c0c 100644 --- a/pkg/apis/compute/cloudaccount.go +++ b/pkg/apis/compute/cloudaccount.go @@ -314,7 +314,7 @@ type CloudaccountUpdateInput struct { } type CloudaccountPerformPublicInput struct { - apis.PerformPublicInput + apis.PerformPublicDomainInput // 共享模式,可能值为provider_domain, system // example: provider_domain diff --git a/pkg/apis/identity/input.go b/pkg/apis/identity/input.go index ccffe229f9..46195d6bea 100644 --- a/pkg/apis/identity/input.go +++ b/pkg/apis/identity/input.go @@ -194,8 +194,8 @@ type EndpointListInput struct { } type SJoinProjectsInput struct { - Projects []string - Roles []string + Projects []string `json:"projects"` + Roles []string `json:"roles"` } func (input SJoinProjectsInput) Validate() error { @@ -209,11 +209,12 @@ func (input SJoinProjectsInput) Validate() error { } type SProjectRole struct { - Project string - Role string + Project string `json:"project"` + Role string `json:"role"` } + type SLeaveProjectsInput struct { - ProjectRoles []SProjectRole + ProjectRoles []SProjectRole `json:"project_roles"` } func (input SLeaveProjectsInput) Validate() error { @@ -451,3 +452,13 @@ type RoleCreateInput struct { apis.SharableResourceBaseCreateInput } + +type PerformGroupAddUsersInput struct { + // 带添加用户列表(ID或名称) + User []string `json:"user"` +} + +type PerformGroupRemoveUsersInput struct { + // 带删除用户列表(ID或名称) + User []string `json:"user"` +} diff --git a/pkg/apis/input.go b/pkg/apis/input.go index 729252ecc7..8608a57aa5 100644 --- a/pkg/apis/input.go +++ b/pkg/apis/input.go @@ -180,18 +180,22 @@ type GetDetailsStatusOutput struct { Status string `json:"status"` } -type PerformPublicInput struct { +type PerformPublicDomainInput struct { // 共享项目资源的共享范围,可能的值为:project, domain和system // pattern: project|domain|system Scope string `json:"scope"` - // 如果共享范围为项目,则在此列表中指定共享的目标项目 - SharedProjects []string `json:"shared_projects"` - // 如果共享范围为域,则在此列表中指定共享的目标域 SharedDomains []string `json:"shared_domains"` } +type PerformPublicProjectInput struct { + PerformPublicDomainInput + + // 如果共享范围为项目,则在此列表中指定共享的目标项目 + SharedProjects []string `json:"shared_projects"` +} + type PerformPrivateInput struct { } @@ -249,3 +253,29 @@ type OpsLogCreateInput struct { OwnerDomainId string `json:"owner_domain_id"` OwnerProjectId string `json:"owner_tenant_id"` } + +// 设置资源的标签(元数据)输入 +type PerformMetadataInput map[string]string + +// 设置资源的用户标签(元数据)输入 +type PerformUserMetadataInput map[string]string + +// 全量替换资源的用户标签(元数据)输入 +type PerformSetUserMetadataInput map[string]string + +// 获取资源的元数据输入 +type GetMetadataInput struct { + // 指定需要获取的所有标签的KEY列表,如果列表为空,则获取全部标签 + // 标签分为 + // + // | 类型 | 说明 | + // |----------|---------------------------------------------| + // | 系统标签 | 平台定义的标签 | + // | 用户标签 | key以user:为前缀,用户自定义标签 | + // | 外部标签 | key以ext:为前缀,为从其他平台同步过来的标签 | + // + Field []string `json:"field"` +} + +// 获取资源标签(元数据)输出 +type GetMetadataOutput map[string]string diff --git a/pkg/apis/output.go b/pkg/apis/output.go index 71abf6bfc3..8748839003 100644 --- a/pkg/apis/output.go +++ b/pkg/apis/output.go @@ -32,7 +32,7 @@ type ModelBaseDetails struct { // example: true CanUpdate bool `json:"can_update"` - // 资源不能删除的原因 + // 资源不能更新的原因 UpdateFailReason string `json:"update_fail_reason"` } diff --git a/pkg/cloudcommon/db/enabledstatusdomainresource.go b/pkg/cloudcommon/db/enabledstatusdomainresource.go index cd21d29580..af10722cd1 100644 --- a/pkg/cloudcommon/db/enabledstatusdomainresource.go +++ b/pkg/cloudcommon/db/enabledstatusdomainresource.go @@ -47,6 +47,7 @@ func (self *SEnabledStatusDomainLevelResourceBase) AllowPerformEnable(ctx contex return IsDomainAllowPerform(userCred, self, "enable") } +// 启用资源 func (self *SEnabledStatusDomainLevelResourceBase) PerformEnable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformEnableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, true) if err != nil { @@ -59,6 +60,7 @@ func (self *SEnabledStatusDomainLevelResourceBase) AllowPerformDisable(ctx conte return IsDomainAllowPerform(userCred, self, "disable") } +// 禁用资源 func (self *SEnabledStatusDomainLevelResourceBase) PerformDisable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformDisableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, false) if err != nil { diff --git a/pkg/cloudcommon/db/enabledstatusinfrasresource.go b/pkg/cloudcommon/db/enabledstatusinfrasresource.go index d6a4271a30..0f8e6df0e4 100644 --- a/pkg/cloudcommon/db/enabledstatusinfrasresource.go +++ b/pkg/cloudcommon/db/enabledstatusinfrasresource.go @@ -47,6 +47,7 @@ func (self *SEnabledStatusInfrasResourceBase) AllowPerformEnable(ctx context.Con return IsDomainAllowPerform(userCred, self, "enable") } +// 启用资源 func (self *SEnabledStatusInfrasResourceBase) PerformEnable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformEnableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, true) if err != nil { @@ -59,6 +60,7 @@ func (self *SEnabledStatusInfrasResourceBase) AllowPerformDisable(ctx context.Co return IsDomainAllowPerform(userCred, self, "disable") } +// 禁用资源 func (self *SEnabledStatusInfrasResourceBase) PerformDisable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformDisableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, false) if err != nil { diff --git a/pkg/cloudcommon/db/enabledstatusstandalone.go b/pkg/cloudcommon/db/enabledstatusstandalone.go index 82c3ca3763..1c11c827f2 100644 --- a/pkg/cloudcommon/db/enabledstatusstandalone.go +++ b/pkg/cloudcommon/db/enabledstatusstandalone.go @@ -47,6 +47,7 @@ func (self *SEnabledStatusStandaloneResourceBase) AllowPerformEnable(ctx context return IsAdminAllowPerform(userCred, self, "enable") } +// 启用资源 func (self *SEnabledStatusStandaloneResourceBase) PerformEnable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformEnableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, true) if err != nil { @@ -59,6 +60,7 @@ func (self *SEnabledStatusStandaloneResourceBase) AllowPerformDisable(ctx contex return IsAdminAllowPerform(userCred, self, "disable") } +// 禁用资源 func (self *SEnabledStatusStandaloneResourceBase) PerformDisable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformDisableInput) (jsonutils.JSONObject, error) { err := EnabledPerformEnable(self, ctx, userCred, false) if err != nil { diff --git a/pkg/cloudcommon/db/infraresource.go b/pkg/cloudcommon/db/infraresource.go index e50ddae697..92c632adc7 100644 --- a/pkg/cloudcommon/db/infraresource.go +++ b/pkg/cloudcommon/db/infraresource.go @@ -70,12 +70,12 @@ func (model *SInfrasResourceBase) IsShared() bool { return SharableModelIsShared(model) } -func (model *SInfrasResourceBase) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) bool { +func (model *SInfrasResourceBase) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) bool { return true } -func (model *SInfrasResourceBase) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { - err := SharablePerformPublic(model.GetIInfrasModel(), ctx, userCred, input) +func (model *SInfrasResourceBase) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { + err := SharablePerformPublic(model.GetIInfrasModel(), ctx, userCred, apis.PerformPublicProjectInput{PerformPublicDomainInput: input}) if err != nil { return nil, errors.Wrap(err, "SharablePerformPublic") } diff --git a/pkg/cloudcommon/db/sharablebase.go b/pkg/cloudcommon/db/sharablebase.go index 1f3cfd2ccb..9d0e50e8c8 100644 --- a/pkg/cloudcommon/db/sharablebase.go +++ b/pkg/cloudcommon/db/sharablebase.go @@ -376,8 +376,7 @@ func (m SSharableBaseResource) GetPublicScope() rbacutils.TRbacScope { return rbacutils.String2Scope(m.PublicScope) } -func SharablePerformPublic(model ISharableBaseModel, ctx context.Context, userCred mcclient.TokenCredential, input apis.PerformPublicInput) error { - log.Debugf("%s", jsonutils.Marshal(input)) +func SharablePerformPublic(model ISharableBaseModel, ctx context.Context, userCred mcclient.TokenCredential, input apis.PerformPublicProjectInput) error { var err error resourceScope := model.GetModelManager().ResourceScope() @@ -394,9 +393,8 @@ func SharablePerformPublic(model ISharableBaseModel, ctx context.Context, userCr targetScope = rbacutils.ScopeDomain } - shareResult := apis.PerformPublicInput{ - Scope: string(targetScope), - } + shareResult := apis.PerformPublicProjectInput{} + shareResult.Scope = string(targetScope) candidateIds := model.GetSharableTargetDomainIds() requireIds := model.GetRequiredSharedDomainIds() diff --git a/pkg/cloudcommon/db/sharablevirtual.go b/pkg/cloudcommon/db/sharablevirtual.go index e8e7933d5e..0177d8789a 100644 --- a/pkg/cloudcommon/db/sharablevirtual.go +++ b/pkg/cloudcommon/db/sharablevirtual.go @@ -65,11 +65,11 @@ func (model *SSharableVirtualResourceBase) IsShared() bool { return SharableModelIsShared(model) } -func (model *SSharableVirtualResourceBase) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) bool { +func (model *SSharableVirtualResourceBase) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicProjectInput) bool { return true } -func (model *SSharableVirtualResourceBase) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { +func (model *SSharableVirtualResourceBase) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicProjectInput) (jsonutils.JSONObject, error) { err := SharablePerformPublic(model.GetISharableVirtualModel(), ctx, userCred, input) if err != nil { return nil, errors.Wrap(err, "SharablePerformPublic") diff --git a/pkg/cloudcommon/db/standalone.go b/pkg/cloudcommon/db/standalone.go index 3070e2b169..0bdd420852 100644 --- a/pkg/cloudcommon/db/standalone.go +++ b/pkg/cloudcommon/db/standalone.go @@ -361,97 +361,88 @@ func (model *SStandaloneResourceBase) AllowGetDetailsMetadata(ctx context.Contex return IsAllowGetSpec(rbacutils.ScopeSystem, userCred, model, "metadata") } -func (model *SStandaloneResourceBase) GetDetailsMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { - fields := jsonutils.GetQueryStringArray(query, "field") - val, err := Metadata.GetAll(model, fields, userCred) +// 获取资源标签(元数据) +func (model *SStandaloneResourceBase) GetDetailsMetadata(ctx context.Context, userCred mcclient.TokenCredential, input apis.GetMetadataInput) (apis.GetMetadataOutput, error) { + val, err := Metadata.GetAll(model, input.Field, userCred) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Metadata.GetAll") } - return jsonutils.Marshal(val), nil + return val, nil } func (model *SStandaloneResourceBase) AllowPerformMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "metadata") } -func (model *SStandaloneResourceBase) PerformMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - dict, ok := data.(*jsonutils.JSONDict) - if !ok { - return nil, httperrors.NewInputParameterError("input data not key value dict") - } - dictMap, err := dict.GetMap() - if err != nil { - return nil, err - } +// +onecloud:swagger-gen-ignore +func (model *SStandaloneResourceBase) PerformMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformMetadataInput) (jsonutils.JSONObject, error) { dictStore := make(map[string]interface{}) - for k, v := range dictMap { + for k, v := range input { // 已双下滑线开头的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() + dictStore[k] = v } - err = model.SetAllMetadata(ctx, dictStore, userCred) - return nil, err + err := model.SetAllMetadata(ctx, dictStore, userCred) + if err != nil { + return nil, errors.Wrap(err, "SetAllMetadata") + } + return nil, nil } func (model *SStandaloneResourceBase) AllowPerformUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "user-metadata") } -func (model *SStandaloneResourceBase) PerformUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - dict, ok := data.(*jsonutils.JSONDict) - if !ok { - return nil, httperrors.NewInputParameterError("input data not key value dict") - } - dictMap, err := dict.GetMap() - if err != nil { - return nil, err - } +// 更新资源的用户标签 +// +onecloud:swagger-gen-ignore +func (model *SStandaloneResourceBase) PerformUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformUserMetadataInput) (jsonutils.JSONObject, error) { dictStore := make(map[string]interface{}) - for k, v := range dictMap { - dictStore[USER_TAG_PREFIX+k], _ = v.GetString() + for k, v := range input { + dictStore[USER_TAG_PREFIX+k] = v } - err = model.SetUserMetadataValues(ctx, dictStore, userCred) - return nil, err + err := model.SetUserMetadataValues(ctx, dictStore, userCred) + if err != nil { + return nil, errors.Wrap(err, "SetUserMetadataValues") + } + return nil, nil } func (model *SStandaloneResourceBase) AllowPerformSetUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return IsAllowPerform(rbacutils.ScopeSystem, userCred, model, "set-user-metadata") } -func (model *SStandaloneResourceBase) PerformSetUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - dict, ok := data.(*jsonutils.JSONDict) - if !ok { - return nil, httperrors.NewInputParameterError("input data not key value dict") - } - dictMap, err := dict.GetMap() - if err != nil { - return nil, err - } +// 全量替换资源的所有用户标签 +func (model *SStandaloneResourceBase) PerformSetUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformSetUserMetadataInput) (jsonutils.JSONObject, error) { dictStore := make(map[string]interface{}) - for k, v := range dictMap { - dictStore[USER_TAG_PREFIX+k], _ = v.GetString() + for k, v := range input { + dictStore[USER_TAG_PREFIX+k] = v } - err = model.SetUserMetadataAll(ctx, dictStore, userCred) - return nil, err + err := model.SetUserMetadataAll(ctx, dictStore, userCred) + if err != nil { + return nil, errors.Wrap(err, "SetUserMetadataAll") + } + return nil, nil } func (model *SStandaloneResourceBase) PostUpdate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) { model.SResourceBase.PostUpdate(ctx, userCred, query, data) - jsonMeta, _ := data.Get("__meta__") - if jsonMeta != nil { - model.PerformMetadata(ctx, userCred, nil, jsonMeta) + meta := make(map[string]string) + err := data.Unmarshal(&meta, "__meta__") + if err == nil { + model.PerformMetadata(ctx, userCred, nil, meta) } } func (model *SStandaloneResourceBase) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { model.SResourceBase.PostCreate(ctx, userCred, ownerId, query, data) - jsonMeta, _ := data.Get("__meta__") - if jsonMeta != nil { - model.PerformMetadata(ctx, userCred, nil, jsonMeta) + meta := make(map[string]string) + err := data.Unmarshal(&meta, "__meta__") + if err == nil { + model.PerformMetadata(ctx, userCred, nil, meta) } } diff --git a/pkg/cloudcommon/db/statusbase.go b/pkg/cloudcommon/db/statusbase.go index b518bfe01b..319f70532b 100644 --- a/pkg/cloudcommon/db/statusbase.go +++ b/pkg/cloudcommon/db/statusbase.go @@ -92,6 +92,7 @@ func (model *SStatusResourceBase) IsInStatus(status ...string) bool { return IsAllowGetSpec(rbacutils.ScopeSystem, userCred, model, "status") }*/ +// 获取资源状态 func (model *SStatusResourceBase) GetDetailsStatus(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (apis.GetDetailsStatusOutput, error) { ret := apis.GetDetailsStatusOutput{} ret.Status = model.Status diff --git a/pkg/cloudcommon/db/statusdomainresource.go b/pkg/cloudcommon/db/statusdomainresource.go index 6581439038..5dd831bcc4 100644 --- a/pkg/cloudcommon/db/statusdomainresource.go +++ b/pkg/cloudcommon/db/statusdomainresource.go @@ -51,6 +51,7 @@ func (self *SStatusDomainLevelResourceBase) AllowPerformStatus(ctx context.Conte return IsDomainAllowPerform(userCred, self, "status") } +// 更新资源状态 func (self *SStatusDomainLevelResourceBase) PerformStatus(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformStatusInput) (jsonutils.JSONObject, error) { err := StatusBasePerformStatus(self, userCred, input) if err != nil { diff --git a/pkg/cloudcommon/db/statusinfrasresource.go b/pkg/cloudcommon/db/statusinfrasresource.go index f16c59667d..fa44c4af29 100644 --- a/pkg/cloudcommon/db/statusinfrasresource.go +++ b/pkg/cloudcommon/db/statusinfrasresource.go @@ -51,6 +51,7 @@ func (self *SStatusInfrasResourceBase) AllowPerformStatus(ctx context.Context, u return IsDomainAllowPerform(userCred, self, "status") } +// 更新资源状态 func (self *SStatusInfrasResourceBase) PerformStatus(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformStatusInput) (jsonutils.JSONObject, error) { err := StatusBasePerformStatus(self, userCred, input) if err != nil { diff --git a/pkg/cloudcommon/db/statusstandalone.go b/pkg/cloudcommon/db/statusstandalone.go index 00be874f43..ccde6b0159 100644 --- a/pkg/cloudcommon/db/statusstandalone.go +++ b/pkg/cloudcommon/db/statusstandalone.go @@ -51,6 +51,7 @@ func (self *SStatusStandaloneResourceBase) AllowPerformStatus(ctx context.Contex return IsAdminAllowPerform(userCred, self, "status") } +// 更新资源状态 func (self *SStatusStandaloneResourceBase) PerformStatus(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformStatusInput) (jsonutils.JSONObject, error) { err := StatusBasePerformStatus(self, userCred, input) if err != nil { diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 27ef16984c..1b97c10d4d 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -1986,7 +1986,7 @@ func (account *SCloudaccount) PerformPublic(ctx context.Context, userCred mcclie return nil, errors.Wrap(httperrors.ErrInputParameter, "share_mode cannot be account_domain") } - _, err := account.SInfrasResourceBase.PerformPublic(ctx, userCred, query, input.PerformPublicInput) + _, err := account.SInfrasResourceBase.PerformPublic(ctx, userCred, query, input.PerformPublicDomainInput) if err != nil { return nil, errors.Wrap(err, "SInfrasResourceBase.PerformPublic") } @@ -2062,7 +2062,7 @@ func (account *SCloudaccount) PerformShareMode(ctx context.Context, userCred mcc } else { input2 := api.CloudaccountPerformPublicInput{ ShareMode: input.ShareMode, - PerformPublicInput: apis.PerformPublicInput{ + PerformPublicDomainInput: apis.PerformPublicDomainInput{ Scope: string(rbacutils.ScopeSystem), }, } diff --git a/pkg/compute/models/cloudprovider_quotas.go b/pkg/compute/models/cloudprovider_quotas.go index 89d5512f4b..ad90dbe323 100644 --- a/pkg/compute/models/cloudprovider_quotas.go +++ b/pkg/compute/models/cloudprovider_quotas.go @@ -31,6 +31,7 @@ import ( "yunion.io/x/onecloud/pkg/util/stringutils2" ) +// +onecloud:swagger-gen-ignore type SCloudproviderQuotaManager struct { db.SStandaloneResourceBaseManager db.SExternalizedResourceBaseManager diff --git a/pkg/compute/models/cloudprovidercapacities.go b/pkg/compute/models/cloudprovidercapacities.go index f65d5da829..6be7efb776 100644 --- a/pkg/compute/models/cloudprovidercapacities.go +++ b/pkg/compute/models/cloudprovidercapacities.go @@ -25,6 +25,7 @@ import ( "yunion.io/x/onecloud/pkg/util/stringutils2" ) +// +onecloud:swagger-gen-ignore type SCloudproviderCapabilityManager struct { db.SResourceBaseManager } diff --git a/pkg/compute/models/guest_template.go b/pkg/compute/models/guest_template.go index 19441fa923..f2d3214d01 100644 --- a/pkg/compute/models/guest_template.go +++ b/pkg/compute/models/guest_template.go @@ -471,7 +471,7 @@ func (gt *SGuestTemplate) PerformPublic( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data apis.PerformPublicInput, + data apis.PerformPublicProjectInput, ) (jsonutils.JSONObject, error) { // image, network, secgroup, instancegroup diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index d1af156534..54ba9a2eed 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -100,7 +100,7 @@ type SHost struct { AccessIp string `width:"16" charset:"ascii" nullable:"true" list:"domain"` // 管理地址 - ManagerUri string `width:"256" charset:"ascii" nullable:"true" list:"domain" update:"domain" create:"domain"` + ManagerUri string `width:"256" charset:"ascii" nullable:"true" list:"domain" update:"domain" create:"domain_optional"` // 系统信息 SysInfo jsonutils.JSONObject `nullable:"true" search:"domain" list:"domain" update:"domain" create:"domain_optional"` @@ -5005,7 +5005,7 @@ func (host *SHost) GetUsages() []db.IUsage { } } -func (host *SHost) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { +func (host *SHost) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { // perform public for all connected local storage storages := host.GetAttachedLocalStorages() for i := range storages { diff --git a/pkg/compute/models/instance_snapshot_joint.go b/pkg/compute/models/instance_snapshot_joint.go index ee22653deb..a2cb4177af 100644 --- a/pkg/compute/models/instance_snapshot_joint.go +++ b/pkg/compute/models/instance_snapshot_joint.go @@ -32,6 +32,7 @@ func init() { }) } +// +onecloud:swagger-gen-ignore type SInstanceSnapshotJoint struct { db.SVirtualJointResourceBase @@ -40,6 +41,7 @@ type SInstanceSnapshotJoint struct { DiskIndex int8 `nullable:"false" default:"0" list:"user" create:"required"` } +// +onecloud:swagger-gen-ignore type SInstanceSnapshotJointManager struct { db.SVirtualJointResourceBaseManager } diff --git a/pkg/compute/models/loadbalancerawscachedlbb.go b/pkg/compute/models/loadbalancerawscachedlbb.go index c92865d63e..702e29f96e 100644 --- a/pkg/compute/models/loadbalancerawscachedlbb.go +++ b/pkg/compute/models/loadbalancerawscachedlbb.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SAwsCachedLbManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancerawscachedlbbg.go b/pkg/compute/models/loadbalancerawscachedlbbg.go index 7af4c01a80..693eb9fd2b 100644 --- a/pkg/compute/models/loadbalancerawscachedlbbg.go +++ b/pkg/compute/models/loadbalancerawscachedlbbg.go @@ -33,6 +33,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SAwsCachedLbbgManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancercachedacls.go b/pkg/compute/models/loadbalancercachedacls.go index 0c44e17d95..4b2e7c13de 100644 --- a/pkg/compute/models/loadbalancercachedacls.go +++ b/pkg/compute/models/loadbalancercachedacls.go @@ -36,6 +36,7 @@ import ( "yunion.io/x/onecloud/pkg/util/stringutils2" ) +// +onecloud:swagger-gen-ignore type SCachedLoadbalancerAclManager struct { SLoadbalancerLogSkipper db.SSharableVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancercachedcertificates.go b/pkg/compute/models/loadbalancercachedcertificates.go index efcf9fbc0a..2106132db8 100644 --- a/pkg/compute/models/loadbalancercachedcertificates.go +++ b/pkg/compute/models/loadbalancercachedcertificates.go @@ -37,6 +37,7 @@ import ( "yunion.io/x/onecloud/pkg/util/stringutils2" ) +// +onecloud:swagger-gen-ignore type SCachedLoadbalancerCertificateManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancerhuaweicachedlbb.go b/pkg/compute/models/loadbalancerhuaweicachedlbb.go index b4a043f7a0..0cb66bf4f1 100644 --- a/pkg/compute/models/loadbalancerhuaweicachedlbb.go +++ b/pkg/compute/models/loadbalancerhuaweicachedlbb.go @@ -31,6 +31,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SHuaweiCachedLbManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancerhuaweicachedlbbg.go b/pkg/compute/models/loadbalancerhuaweicachedlbbg.go index cbb63de004..5d982216cf 100644 --- a/pkg/compute/models/loadbalancerhuaweicachedlbbg.go +++ b/pkg/compute/models/loadbalancerhuaweicachedlbbg.go @@ -33,6 +33,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SHuaweiCachedLbbgManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancerqcloudcachedlbb.go b/pkg/compute/models/loadbalancerqcloudcachedlbb.go index d8fbd38a26..2efbea1f7c 100644 --- a/pkg/compute/models/loadbalancerqcloudcachedlbb.go +++ b/pkg/compute/models/loadbalancerqcloudcachedlbb.go @@ -29,6 +29,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SQcloudCachedLbManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/loadbalancerqcloudcachedlbbg.go b/pkg/compute/models/loadbalancerqcloudcachedlbbg.go index 91f0832cf2..0301c90fcb 100644 --- a/pkg/compute/models/loadbalancerqcloudcachedlbbg.go +++ b/pkg/compute/models/loadbalancerqcloudcachedlbbg.go @@ -34,6 +34,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SQcloudCachedLbbgManager struct { SLoadbalancerLogSkipper db.SVirtualResourceBaseManager diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 76340badff..636ebe5bcc 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -1454,7 +1454,7 @@ func (self *SStorage) StartDeleteRbdDisks(ctx context.Context, userCred mcclient return nil } -func (storage *SStorage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { +func (storage *SStorage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { // not allow to perform public for locally connected storage if storage.IsLocal() { hosts := storage.GetAttachedHosts() @@ -1465,7 +1465,7 @@ func (storage *SStorage) PerformPublic(ctx context.Context, userCred mcclient.To return storage.performPublicInternal(ctx, userCred, query, input) } -func (storage *SStorage) performPublicInternal(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { +func (storage *SStorage) performPublicInternal(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { return storage.SEnabledStatusInfrasResourceBase.PerformPublic(ctx, userCred, query, input) } diff --git a/pkg/compute/models/vcenters.go b/pkg/compute/models/vcenters.go index 583e5c82d8..35ee41766f 100644 --- a/pkg/compute/models/vcenters.go +++ b/pkg/compute/models/vcenters.go @@ -24,6 +24,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) +// +onecloud:swagger-gen-ignore type SVCenterManager struct { db.SEnabledStatusStandaloneResourceBaseManager } diff --git a/pkg/image/models/image_guest.go b/pkg/image/models/image_guest.go index afc89bc11a..d31e230201 100644 --- a/pkg/image/models/image_guest.go +++ b/pkg/image/models/image_guest.go @@ -535,7 +535,7 @@ func (self *SGuestImage) PerformPublic( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - input apis.PerformPublicInput, + input apis.PerformPublicProjectInput, ) (jsonutils.JSONObject, error) { images, err := GuestImageJointManager.GetImagesByGuestImageId(self.Id) if err != nil { diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 2d4f969be2..dd8965b0f0 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -1359,9 +1359,8 @@ func (self *SImage) PerformMarkStandard( } isStandard := jsonutils.QueryBoolean(data, "is_standard", false) if !self.IsStandard.IsTrue() && isStandard { - input := apis.PerformPublicInput{ - Scope: "system", - } + input := apis.PerformPublicProjectInput{} + input.Scope = "system" _, err := self.PerformPublic(ctx, userCred, query, input) if err != nil { return nil, errors.Wrap(err, "PerformPublic") @@ -1445,7 +1444,7 @@ func (img *SImage) GetUsages() []db.IUsage { } } -func (img *SImage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { +func (img *SImage) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicProjectInput) (jsonutils.JSONObject, error) { if img.IsStandard.IsTrue() { return nil, errors.Wrap(httperrors.ErrForbidden, "cannot perform public for standard image") } diff --git a/pkg/keystone/models/assignments.go b/pkg/keystone/models/assignments.go index 6e9f7d199b..4606c1e686 100644 --- a/pkg/keystone/models/assignments.go +++ b/pkg/keystone/models/assignments.go @@ -36,6 +36,7 @@ import ( "yunion.io/x/onecloud/pkg/util/stringutils2" ) +// +onecloud:swagger-gen-ignore type SAssignmentManager struct { db.SResourceBaseManager } diff --git a/pkg/keystone/models/configs.go b/pkg/keystone/models/configs.go index 54bd0127ba..d6395fe8b6 100644 --- a/pkg/keystone/models/configs.go +++ b/pkg/keystone/models/configs.go @@ -31,6 +31,7 @@ import ( "yunion.io/x/onecloud/pkg/util/logclient" ) +// +onecloud:swagger-gen-ignore type SConfigOptionManager struct { db.SResourceBaseManager IsSensitive bool diff --git a/pkg/keystone/models/federated_user.go b/pkg/keystone/models/federated_user.go index 200a78f6f8..fbcb4b6759 100644 --- a/pkg/keystone/models/federated_user.go +++ b/pkg/keystone/models/federated_user.go @@ -16,6 +16,7 @@ package models import "yunion.io/x/onecloud/pkg/cloudcommon/db" +// +onecloud:swagger-gen-ignore type SFederatedUserManager struct { db.SResourceBaseManager } diff --git a/pkg/keystone/models/groups.go b/pkg/keystone/models/groups.go index e304a57ceb..4288ae15df 100644 --- a/pkg/keystone/models/groups.go +++ b/pkg/keystone/models/groups.go @@ -338,18 +338,19 @@ func (group *SGroup) UnlinkIdp(idpId string) error { func (group *SGroup) AllowPerformJoin(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SJoinProjectsInput, ) bool { return db.IsAdminAllowPerform(userCred, group, "join") } +// 组加入项目 func (group *SGroup) PerformJoin( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SJoinProjectsInput, ) (jsonutils.JSONObject, error) { - err := joinProjects(group, false, ctx, userCred, data) + err := joinProjects(group, false, ctx, userCred, input) if err != nil { return nil, err } @@ -359,18 +360,19 @@ func (group *SGroup) PerformJoin( func (group *SGroup) AllowPerformLeave(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SLeaveProjectsInput, ) bool { return db.IsAdminAllowPerform(userCred, group, "leave") } +// 组退出项目 func (group *SGroup) PerformLeave( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SLeaveProjectsInput, ) (jsonutils.JSONObject, error) { - err := leaveProjects(group, false, ctx, userCred, data) + err := leaveProjects(group, false, ctx, userCred, input) if err != nil { return nil, err } @@ -442,3 +444,75 @@ func (group *SGroup) PostCreate( log.Errorf("CancelPendingUsage fail %s", err) } } + +func (group *SGroup) AllowPerformAddUsers(ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + input api.PerformGroupAddUsersInput, +) bool { + return db.IsDomainAllowPerform(userCred, group, "add-users") +} + +// 组添加用户 +func (group *SGroup) PerformAddUsers( + ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + input api.PerformGroupAddUsersInput, +) (jsonutils.JSONObject, error) { + users := make([]*SUser, 0) + for _, uid := range input.User { + usr, err := UserManager.FetchByIdOrName(userCred, uid) + if err != nil { + if errors.Cause(err) == sql.ErrNoRows { + return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "user %s", uid) + } else { + return nil, errors.Wrap(err, "UserManager.FetchByIdOrName") + } + } + users = append(users, usr.(*SUser)) + } + for i := range users { + err := UsergroupManager.add(ctx, userCred, users[i], group) + if err != nil { + return nil, errors.Wrap(err, "UsergroupManager.add") + } + } + return nil, nil +} + +func (group *SGroup) AllowPerformRemoveUsers(ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + input api.PerformGroupRemoveUsersInput, +) bool { + return db.IsDomainAllowPerform(userCred, group, "remove-users") +} + +// 组删除用户 +func (group *SGroup) PerformRemoveUsers( + ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + input api.PerformGroupRemoveUsersInput, +) (jsonutils.JSONObject, error) { + users := make([]*SUser, 0) + for _, uid := range input.User { + usr, err := UserManager.FetchByIdOrName(userCred, uid) + if err != nil { + if errors.Cause(err) == sql.ErrNoRows { + return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "user %s", uid) + } else { + return nil, errors.Wrap(err, "UserManager.FetchByIdOrName") + } + } + users = append(users, usr.(*SUser)) + } + for i := range users { + err := UsergroupManager.remove(ctx, userCred, users[i], group) + if err != nil { + return nil, errors.Wrap(err, "UsergroupManager.add") + } + } + return nil, nil +} diff --git a/pkg/keystone/models/id_mappings.go b/pkg/keystone/models/id_mappings.go index 7e652883c8..851cf90a47 100644 --- a/pkg/keystone/models/id_mappings.go +++ b/pkg/keystone/models/id_mappings.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" ) +// +onecloud:swagger-gen-ignore type SIdmappingManager struct { db.SResourceBaseManager } diff --git a/pkg/keystone/models/identity_provider.go b/pkg/keystone/models/identity_provider.go index 2af7ee8a31..82f2afbd89 100644 --- a/pkg/keystone/models/identity_provider.go +++ b/pkg/keystone/models/identity_provider.go @@ -225,10 +225,12 @@ func (ident *SIdentityProvider) getDriverClass() driver.IIdentityBackendClass { return driver.GetDriverClass(ident.Driver) } +// 配置认证源 func (ident *SIdentityProvider) AllowPerformConfig(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.PerformConfigInput) bool { return db.IsAdminAllowUpdateSpec(userCred, ident, "config") } +// 配置认证源 func (ident *SIdentityProvider) PerformConfig(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.PerformConfigInput) (jsonutils.JSONObject, error) { if ident.Status == api.IdentityDriverStatusConnected && ident.GetEnabled() { return nil, httperrors.NewInvalidStatusError("cannot update config when enabled and connected") @@ -408,6 +410,7 @@ func (self *SIdentityProvider) AllowPerformSync(ctx context.Context, userCred mc return db.IsAdminAllowPerform(userCred, self, "sync") } +// 手动同步认证源 func (self *SIdentityProvider) PerformSync(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { if !self.GetEnabled() { return nil, httperrors.NewInvalidStatusError("Account disabled") diff --git a/pkg/keystone/models/localusers.go b/pkg/keystone/models/localusers.go index dea6de28f5..142a81026f 100644 --- a/pkg/keystone/models/localusers.go +++ b/pkg/keystone/models/localusers.go @@ -25,6 +25,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" ) +// +onecloud:swagger-gen-ignore type SLocalUserManager struct { db.SResourceBaseManager } diff --git a/pkg/keystone/models/passwords.go b/pkg/keystone/models/passwords.go index 36751f5c69..44a7341031 100644 --- a/pkg/keystone/models/passwords.go +++ b/pkg/keystone/models/passwords.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/onecloud/pkg/util/seclib2" ) +// +onecloud:swagger-gen-ignore type SPasswordManager struct { db.SResourceBaseManager } diff --git a/pkg/keystone/models/policies.go b/pkg/keystone/models/policies.go index 572c913b76..8e522ca14a 100644 --- a/pkg/keystone/models/policies.go +++ b/pkg/keystone/models/policies.go @@ -199,12 +199,12 @@ func (policy *SPolicy) IsShared() bool { return db.SharableModelIsShared(policy) } -func (policy *SPolicy) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) bool { +func (policy *SPolicy) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) bool { return true } -func (policy *SPolicy) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { - err := db.SharablePerformPublic(policy, ctx, userCred, input) +func (policy *SPolicy) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { + err := db.SharablePerformPublic(policy, ctx, userCred, apis.PerformPublicProjectInput{PerformPublicDomainInput: input}) if err != nil { return nil, errors.Wrap(err, "SharablePerformPublic") } diff --git a/pkg/keystone/models/projects.go b/pkg/keystone/models/projects.go index b2e913bd5d..7c91313bab 100644 --- a/pkg/keystone/models/projects.go +++ b/pkg/keystone/models/projects.go @@ -471,14 +471,9 @@ func (project *SProject) PerformJoin( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SProjectAddUserGroupInput, ) (jsonutils.JSONObject, error) { - input := api.SProjectAddUserGroupInput{} - err := data.Unmarshal(&input) - if err != nil { - return nil, httperrors.NewInputParameterError("unmarshal project add user group input error %s", err) - } - err = input.Validate() + err := input.Validate() if err != nil { return nil, httperrors.NewInputParameterError(err.Error()) } @@ -551,14 +546,9 @@ func (project *SProject) PerformLeave( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SProjectRemoveUserGroupInput, ) (jsonutils.JSONObject, error) { - input := api.SProjectRemoveUserGroupInput{} - err := data.Unmarshal(&input) - if err != nil { - return nil, httperrors.NewInputParameterError("unmarshal project remove usergroup input error %s", err) - } - err = input.Validate() + err := input.Validate() if err != nil { return nil, httperrors.NewInputParameterError(err.Error()) } diff --git a/pkg/keystone/models/roles.go b/pkg/keystone/models/roles.go index b7aa0939bc..d53d22adac 100644 --- a/pkg/keystone/models/roles.go +++ b/pkg/keystone/models/roles.go @@ -419,12 +419,12 @@ func (role *SRole) IsSharable(reqUsrId mcclient.IIdentityProvider) bool { return db.SharableModelIsSharable(role, reqUsrId) } -func (role *SRole) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) bool { +func (role *SRole) AllowPerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) bool { return true } -func (role *SRole) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicInput) (jsonutils.JSONObject, error) { - err := db.SharablePerformPublic(role, ctx, userCred, input) +func (role *SRole) PerformPublic(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformPublicDomainInput) (jsonutils.JSONObject, error) { + err := db.SharablePerformPublic(role, ctx, userCred, apis.PerformPublicProjectInput{PerformPublicDomainInput: input}) if err != nil { return nil, errors.Wrap(err, "SharablePerformPublic") } diff --git a/pkg/keystone/models/users.go b/pkg/keystone/models/users.go index 3d3c5cc044..9fe0860132 100644 --- a/pkg/keystone/models/users.go +++ b/pkg/keystone/models/users.go @@ -835,32 +835,27 @@ func (user *SUser) UnlinkIdp(idpId string) error { func (user *SUser) AllowPerformJoin(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SJoinProjectsInput, ) bool { return db.IsAdminAllowPerform(userCred, user, "join") } +// 用户加入项目 func (user *SUser) PerformJoin( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SJoinProjectsInput, ) (jsonutils.JSONObject, error) { - err := joinProjects(user, true, ctx, userCred, data) + err := joinProjects(user, true, ctx, userCred, input) if err != nil { return nil, err } return nil, nil } -func joinProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mcclient.TokenCredential, data jsonutils.JSONObject) error { - input := api.SJoinProjectsInput{} - err := data.Unmarshal(&input) - if err != nil { - return httperrors.NewInputParameterError("unmarshal input error %s", err) - } - - err = input.Validate() +func joinProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mcclient.TokenCredential, input api.SJoinProjectsInput) error { + err := input.Validate() if err != nil { return httperrors.NewInputParameterError(err.Error()) } @@ -910,30 +905,26 @@ func joinProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mc func (user *SUser) AllowPerformLeave(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SLeaveProjectsInput, ) bool { return db.IsAdminAllowPerform(userCred, user, "leave") } +// 用户退出项目 func (user *SUser) PerformLeave( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, - data jsonutils.JSONObject, + input api.SLeaveProjectsInput, ) (jsonutils.JSONObject, error) { - err := leaveProjects(user, true, ctx, userCred, data) + err := leaveProjects(user, true, ctx, userCred, input) if err != nil { return nil, err } return nil, nil } -func leaveProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mcclient.TokenCredential, data jsonutils.JSONObject) error { - input := api.SLeaveProjectsInput{} - err := data.Unmarshal(&input) - if err != nil { - return httperrors.NewInputParameterError("unmarshal leave porject input error: %s", err) - } +func leaveProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mcclient.TokenCredential, input api.SLeaveProjectsInput) error { for i := range input.ProjectRoles { projObj, err := ProjectManager.FetchByIdOrName(userCred, input.ProjectRoles[i].Project) if err != nil {