Merge pull request #7843 from ioito/hotfix/qx-clouduser-opti

fix: optimzed clouduser
This commit is contained in:
yunion-ci-robot
2020-09-10 09:49:24 +08:00
committed by GitHub
3 changed files with 33 additions and 15 deletions
+4 -4
View File
@@ -259,17 +259,17 @@ func (self *SCloudpolicy) GetCloudgroups() ([]SCloudgroup, error) {
func (self *SCloudpolicy) ValidateDeleteCondition(ctx context.Context) error {
users, err := self.GetCloudusers()
if err != nil {
return errors.Wrapf(err, "GetCloudusers")
return httperrors.NewGeneralError(errors.Wrapf(err, "GetCloudusers"))
}
if len(users) > 0 {
return errors.Wrapf(httperrors.ErrNotEmpty, "policy %s has %d users used", self.Name, len(users))
return httperrors.NewNotEmptyError("policy %s has %d users used", self.Name, len(users))
}
groups, err := self.GetCloudgroups()
if err != nil {
return errors.Wrapf(err, "GetCloudgroups")
return httperrors.NewGeneralError(errors.Wrapf(err, "GetCloudgroups"))
}
if len(groups) > 0 {
return errors.Wrapf(httperrors.ErrNotEmpty, "policy %s has %d groups used", self.Name, len(groups))
return httperrors.NewNotEmptyError("policy %s has %d groups used", self.Name, len(groups))
}
return self.SStatusInfrasResourceBase.ValidateDeleteCondition(ctx)
}
+27 -9
View File
@@ -1429,21 +1429,39 @@ func (self *SClouduser) AllowPerformChangeOwner(ctx context.Context, userCred mc
// 变更子账号所属本地用户
func (self *SClouduser) PerformChangeOwner(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.ClouduserChangeOwnerInput) (jsonutils.JSONObject, error) {
user, err := db.UserCacheManager.FetchUserById(ctx, input.UserId)
if err != nil {
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "Not found user %s", input.UserId))
oldUserId := self.OwnerId
newUserId := ""
if len(input.UserId) > 0 {
user, err := db.UserCacheManager.FetchUserById(ctx, input.UserId)
if err != nil {
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "Not found user %s", input.UserId))
}
newUserId = user.Id
}
old := self.OwnerId
_, err = db.Update(self, func() error {
self.OwnerId = user.GetId()
_, err := db.Update(self, func() error {
self.OwnerId = newUserId
return nil
})
if err != nil {
return nil, httperrors.NewGeneralError(err)
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "db.Update"))
}
account, err := self.GetCloudaccount()
if err != nil {
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "GetCloudaccount"))
}
factory, err := account.GetProviderFactory()
if err != nil {
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "GetProviderFactory"))
}
logclient.AddSimpleActionLog(self, logclient.ACT_CHANGE_OWNER, map[string]interface{}{"old": oldUserId, "newUserId": newUserId}, userCred, true)
if len(newUserId) == 0 || !factory.IsSupportResetClouduserPassword() {
return nil, nil
}
logclient.AddSimpleActionLog(self, logclient.ACT_CHANGE_OWNER, map[string]interface{}{"old": old, "new": user}, userCred, true)
return nil, self.StartClouduserResetPasswordTask(ctx, userCred, "", "")
}
+2 -2
View File
@@ -90,11 +90,11 @@ func (opts *ClouduserPasswordOptions) Params() (jsonutils.JSONObject, error) {
type ClouduserChangeOwnerOptions struct {
ClouduserIdOption
USER_ID string `help:"local user id"`
UserId string `help:"local user id"`
}
func (opts *ClouduserChangeOwnerOptions) Params() (jsonutils.JSONObject, error) {
return jsonutils.Marshal(map[string]string{"user_id": opts.USER_ID}), nil
return jsonutils.Marshal(map[string]string{"user_id": opts.UserId}), nil
}
type ClouduserGroupOptions struct {