fix(keystone): show user group info for user (#20468)

This commit is contained in:
屈轩
2024-06-04 14:58:46 +08:00
committed by GitHub
parent 2b95099cc2
commit f69f776622
2 changed files with 43 additions and 0 deletions
+9
View File
@@ -23,6 +23,13 @@ const (
PasswordResetHintExpire = "expire"
)
type SUserGroup struct {
Id string
Name string
Domain string
DomainId string
}
type UserDetails struct {
EnabledIdentityBaseResourceDetails
// IdpResourceInfo
@@ -36,6 +43,8 @@ type UserDetails struct {
// 用户归属的的项目信息
Projects []SFetchDomainObjectWithMetadata `json:"projects"`
// 用户归属的组
Groups []SUserGroup `json:"groups"`
}
type UserUsage struct {
+34
View File
@@ -761,10 +761,44 @@ func (manager *SUserManager) FetchCustomizeColumns(
projectMap[p.UserId] = append(projectMap[p.UserId], p.SFetchDomainObjectWithMetadata)
}
groups := GroupManager.Query().SubQuery()
domains = DomainManager.Query().SubQuery()
ugs := UsergroupManager.Query().In("user_id", userIds).SubQuery()
q = groups.Query(
groups.Field("id"),
groups.Field("name"),
domains.Field("id").Label("domain_id"),
domains.Field("name").Label("domain"),
ugs.Field("user_id"),
)
q = q.Join(domains, sqlchemy.Equals(groups.Field("domain_id"), domains.Field("id")))
q = q.Join(ugs, sqlchemy.Equals(groups.Field("id"), ugs.Field("group_id")))
useGroups := []struct {
api.SUserGroup
UserId string
}{}
err = q.All(&useGroups)
if err != nil {
log.Errorf("query user groups error: %v", err)
return rows
}
groupMap := map[string][]api.SUserGroup{}
for _, ug := range useGroups {
_, ok := groupMap[ug.UserId]
if !ok {
groupMap[ug.UserId] = []api.SUserGroup{}
}
groupMap[ug.UserId] = append(groupMap[ug.UserId], ug.SUserGroup)
}
for i := range rows {
rows[i].ExternalResourceInfo, _ = scopeResources[userIds[i]]
rows[i].UserUsage, _ = usage[userIds[i]]
rows[i].Projects, _ = projectMap[userIds[i]]
rows[i].Groups, _ = groupMap[userIds[i]]
}
return rows