fix: user project lists with metadata (#14053)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2022-04-18 00:01:21 +08:00
committed by GitHub
co-authored by Qiu Jian
parent 82627e7c84
commit 9902e39374
4 changed files with 14 additions and 4 deletions
+6
View File
@@ -37,6 +37,12 @@ type SFetchDomainObject struct {
DomainId string `json:"domain_id"`
}
type SFetchDomainObjectWithMetadata struct {
SFetchDomainObject
Metadata map[string]string `json:"metadata"`
}
type SRoleAssignment struct {
Scope struct {
Domain SIdentityObject `json:"domain"`
+1 -1
View File
@@ -39,5 +39,5 @@ type UserDetails struct {
ExternalResourceInfo
Projects []SFetchDomainObject `json:"projects"`
Projects []SFetchDomainObjectWithMetadata `json:"projects"`
}
+3
View File
@@ -439,6 +439,9 @@ func (manager *SProjectManager) FetchUserProjects(userId string) ([]SProjectExte
if err != nil && err != sql.ErrNoRows {
return nil, errors.Wrap(err, "query.All")
}
for i := range ret {
ret[i].SetModelManager(manager, &ret[i])
}
return ret, nil
}
+4 -3
View File
@@ -606,7 +606,7 @@ func (manager *SUserManager) FetchCustomizeColumns(
EnabledIdentityBaseResourceDetails: identRows[i],
}
userIds[i] = objs[i].(*SUser).Id
rows[i] = userExtra(objs[i].(*SUser), rows[i])
rows[i] = userExtra(ctx, userCred, objs[i].(*SUser), rows[i])
}
idpsMaps, err := fetchIdmappings(userIds, api.IdMappingEntityUser)
@@ -630,7 +630,7 @@ func (manager *SUserManager) FetchCustomizeColumns(
return rows
}
func userExtra(user *SUser, out api.UserDetails) api.UserDetails {
func userExtra(ctx context.Context, userCred mcclient.TokenCredential, user *SUser, out api.UserDetails) api.UserDetails {
out.GroupCount, _ = user.GetGroupCount()
out.ProjectCount, _ = user.GetProjectCount()
out.CredentialCount, _ = user.GetCredentialCount()
@@ -665,12 +665,13 @@ func userExtra(user *SUser, out api.UserDetails) api.UserDetails {
}
projects, _ := ProjectManager.FetchUserProjects(user.Id)
out.Projects = make([]api.SFetchDomainObject, len(projects))
out.Projects = make([]api.SFetchDomainObjectWithMetadata, len(projects))
for i, proj := range projects {
out.Projects[i].Id = proj.Id
out.Projects[i].Name = proj.Name
out.Projects[i].Domain = proj.DomainName
out.Projects[i].DomainId = proj.DomainId
out.Projects[i].Metadata, _ = proj.GetAllMetadata(ctx, userCred)
}
return out