mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-06-20 18:26:05 +08:00
fix(cloudid): distinct field for cloudid resources (#20820)
This commit is contained in:
@@ -258,6 +258,31 @@ func (manager *SCloudgroupManager) FetchCustomizeColumns(
|
||||
return rows
|
||||
}
|
||||
|
||||
func (manager *SCloudgroupManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) {
|
||||
switch field {
|
||||
case "manager":
|
||||
managerQuery := CloudproviderManager.Query("name", "id").SubQuery()
|
||||
q.AppendField(managerQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(managerQuery, sqlchemy.Equals(q.Field("manager_id"), managerQuery.Field("id")))
|
||||
return q, nil
|
||||
case "account":
|
||||
accountQuery := CloudaccountManager.Query("name", "id").SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
q.AppendField(accountQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
case "provider", "brand":
|
||||
accountQuery := CloudaccountManager.Query(field, "id").Distinct().SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
q.AppendField(accountQuery.Field(field)).Distinct()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
}
|
||||
return q, httperrors.ErrNotFound
|
||||
}
|
||||
|
||||
// 创建权限组
|
||||
func (manager *SCloudgroupManager) ValidateCreateData(
|
||||
ctx context.Context,
|
||||
|
||||
@@ -185,6 +185,28 @@ func (manager *SClouduserManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fi
|
||||
if err == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
switch field {
|
||||
case "manager":
|
||||
managerQuery := CloudproviderManager.Query("name", "id").SubQuery()
|
||||
q.AppendField(managerQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(managerQuery, sqlchemy.Equals(q.Field("manager_id"), managerQuery.Field("id")))
|
||||
return q, nil
|
||||
case "account":
|
||||
accountQuery := CloudaccountManager.Query("name", "id").SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
q.AppendField(accountQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
case "provider", "brand":
|
||||
accountQuery := CloudaccountManager.Query(field, "id").Distinct().SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
q.AppendField(accountQuery.Field(field)).Distinct()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
}
|
||||
return q, httperrors.ErrNotFound
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,43 @@ func (manager *SSamluserManager) ListItemFilter(ctx context.Context, q *sqlchemy
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SSamluserManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
q, err = manager.SStatusDomainLevelUserResourceBaseManager.QueryDistinctExtraField(q, field)
|
||||
if err == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
switch field {
|
||||
case "manager":
|
||||
managerQuery := CloudproviderManager.Query("name", "id").SubQuery()
|
||||
groupQuery := CloudgroupManager.Query("id").SubQuery()
|
||||
q.AppendField(managerQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(groupQuery, sqlchemy.Equals(q.Field("cloudgroup_id"), groupQuery.Field("id")))
|
||||
q = q.Join(managerQuery, sqlchemy.Equals(groupQuery.Field("manager_id"), managerQuery.Field("id")))
|
||||
return q, nil
|
||||
case "account":
|
||||
accountQuery := CloudaccountManager.Query("name", "id").SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
groupQuery := CloudgroupManager.Query("id").SubQuery()
|
||||
q.AppendField(accountQuery.Field("name", field)).Distinct()
|
||||
q = q.Join(groupQuery, sqlchemy.Equals(q.Field("cloudgroup_id"), groupQuery.Field("id")))
|
||||
q = q.Join(providers, sqlchemy.Equals(groupQuery.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
case "provider", "brand":
|
||||
accountQuery := CloudaccountManager.Query(field, "id").Distinct().SubQuery()
|
||||
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
|
||||
groupQuery := CloudgroupManager.Query("id").SubQuery()
|
||||
q.AppendField(accountQuery.Field(field)).Distinct()
|
||||
q = q.Join(groupQuery, sqlchemy.Equals(q.Field("cloudgroup_id"), groupQuery.Field("id")))
|
||||
q = q.Join(providers, sqlchemy.Equals(groupQuery.Field("manager_id"), providers.Field("id")))
|
||||
q = q.Join(accountQuery, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountQuery.Field("id")))
|
||||
return q, nil
|
||||
}
|
||||
return q, httperrors.ErrNotFound
|
||||
}
|
||||
|
||||
// 创建SAML认证用户
|
||||
func (manager *SSamluserManager) ValidateCreateData(
|
||||
ctx context.Context,
|
||||
|
||||
Reference in New Issue
Block a user