From 64f5bc748c545a41f26000e6965189fa6002960f Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 3 Sep 2020 18:36:28 +0800 Subject: [PATCH] fix: search by chs projectname or domainname --- pkg/cloudcommon/db/domain.go | 9 ++++++++- pkg/cloudcommon/db/project.go | 9 ++++++++- pkg/keystone/models/identitybase.go | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pkg/cloudcommon/db/domain.go b/pkg/cloudcommon/db/domain.go index e269aaf835..f458668c5b 100644 --- a/pkg/cloudcommon/db/domain.go +++ b/pkg/cloudcommon/db/domain.go @@ -106,9 +106,16 @@ func (manager *SDomainizedResourceBaseManager) ListItemFilter( query apis.DomainizedResourceListInput, ) (*sqlchemy.SQuery, error) { if len(query.ProjectDomainIds) > 0 { + // make sure ids are not utf8 string + idList := make([]string, 0) + for _, pid := range query.ProjectDomainIds { + if !stringutils2.IsUtf8(pid) { + idList = append(idList, pid) + } + } tenants := TenantCacheManager.GetDomainQuery().SubQuery() subq := tenants.Query(tenants.Field("id")).Filter(sqlchemy.OR( - sqlchemy.In(tenants.Field("id"), query.ProjectDomainIds), + sqlchemy.In(tenants.Field("id"), idList), sqlchemy.In(tenants.Field("name"), query.ProjectDomainIds), )).SubQuery() q = q.In("domain_id", subq) diff --git a/pkg/cloudcommon/db/project.go b/pkg/cloudcommon/db/project.go index ef5664342c..c36ee14aeb 100644 --- a/pkg/cloudcommon/db/project.go +++ b/pkg/cloudcommon/db/project.go @@ -101,9 +101,16 @@ func (manager *SProjectizedResourceBaseManager) ListItemFilter( return nil, errors.Wrap(err, "SDomainizedResourceBaseManager.ListItemFilter") } if len(query.ProjectIds) > 0 { + // make sure ids are not utf8 string + idList := make([]string, 0) + for _, pid := range query.ProjectIds { + if !stringutils2.IsUtf8(pid) { + idList = append(idList, pid) + } + } tenants := TenantCacheManager.GetTenantQuery().SubQuery() subq := tenants.Query(tenants.Field("id")).Filter(sqlchemy.OR( - sqlchemy.In(tenants.Field("id"), query.ProjectIds), + sqlchemy.In(tenants.Field("id"), idList), sqlchemy.In(tenants.Field("name"), query.ProjectIds), )).SubQuery() q = q.In("tenant_id", subq) diff --git a/pkg/keystone/models/identitybase.go b/pkg/keystone/models/identitybase.go index 893ac08d09..20e9c48d81 100644 --- a/pkg/keystone/models/identitybase.go +++ b/pkg/keystone/models/identitybase.go @@ -132,9 +132,16 @@ func (manager *SIdentityBaseResourceManager) ListItemFilter( } // override manager.SDomainizedResourceBaseManager.ListItemFilter() if len(query.ProjectDomainIds) > 0 { + // make sure ids are not utf8 string + idList := make([]string, 0) + for _, pid := range query.ProjectDomainIds { + if !stringutils2.IsUtf8(pid) { + idList = append(idList, pid) + } + } domains := DomainManager.Query().SubQuery() subq := domains.Query(domains.Field("id")).Filter(sqlchemy.OR( - sqlchemy.In(domains.Field("id"), query.ProjectDomainIds), + sqlchemy.In(domains.Field("id"), idList), sqlchemy.In(domains.Field("name"), query.ProjectDomainIds), )) q = q.In("domain_id", subq.SubQuery())