in server/service/rbac/account_service.go [101:135]
func UpdateAccount(ctx context.Context, name string, a *rbacmodel.Account) error {
// todo params validation
err := validator.ValidateUpdateAccount(a)
if err != nil {
return discovery.NewError(discovery.ErrInvalidParams, err.Error())
}
if err = illegalAccountCheck(ctx, name); err != nil {
return err
}
if len(a.Status) == 0 && len(a.Roles) == 0 {
return discovery.NewError(discovery.ErrInvalidParams, "status and roles cannot be empty both")
}
oldAccount, err := GetAccount(ctx, name)
if err != nil {
log.Error(fmt.Sprintf("get account [%s] failed", name), err)
return err
}
if len(a.Status) != 0 {
oldAccount.Status = a.Status
}
if len(a.Roles) != 0 {
oldAccount.Roles = a.Roles
}
if err = checkRoleNames(ctx, oldAccount.Roles); err != nil {
return rbacmodel.NewError(rbacmodel.ErrAccountHasInvalidRole, err.Error())
}
err = rbac.Instance().UpdateAccount(ctx, name, oldAccount)
if err != nil {
log.Error("can not edit account info", err)
return err
}
log.Info(fmt.Sprintf("account [%s] is edit", oldAccount.ID))
return nil
}