diff --git a/pkg/apis/identity/assignments.go b/pkg/apis/identity/assignments.go index 156af19663..0e39c9c5ad 100644 --- a/pkg/apis/identity/assignments.go +++ b/pkg/apis/identity/assignments.go @@ -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"` diff --git a/pkg/apis/identity/user.go b/pkg/apis/identity/user.go index 037f03af6e..5df4389ccb 100644 --- a/pkg/apis/identity/user.go +++ b/pkg/apis/identity/user.go @@ -39,5 +39,5 @@ type UserDetails struct { ExternalResourceInfo - Projects []SFetchDomainObject `json:"projects"` + Projects []SFetchDomainObjectWithMetadata `json:"projects"` } diff --git a/pkg/keystone/models/projects.go b/pkg/keystone/models/projects.go index 2b65d9044e..3799dbe702 100644 --- a/pkg/keystone/models/projects.go +++ b/pkg/keystone/models/projects.go @@ -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 } diff --git a/pkg/keystone/models/users.go b/pkg/keystone/models/users.go index 70c757f0dd..9dc07af8c0 100644 --- a/pkg/keystone/models/users.go +++ b/pkg/keystone/models/users.go @@ -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