mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix(region): including domain info in project-role results
This commit is contained in:
@@ -31,35 +31,59 @@ type RoleAssignmentManagerV3 struct {
|
||||
}
|
||||
|
||||
type role struct {
|
||||
id string
|
||||
name string
|
||||
id string
|
||||
name string
|
||||
domain struct {
|
||||
id string
|
||||
name string
|
||||
}
|
||||
}
|
||||
|
||||
type projectRoles struct {
|
||||
id string
|
||||
name string
|
||||
id string
|
||||
name string
|
||||
domain struct {
|
||||
id string
|
||||
name string
|
||||
}
|
||||
typ string
|
||||
roles []role
|
||||
}
|
||||
|
||||
func newProjectRoles(projectId, projectName, roleId, roleName, typ string) *projectRoles {
|
||||
return &projectRoles{id: projectId, name: projectName, typ: typ, roles: []role{{id: roleId, name: roleName}}}
|
||||
func newProjectRoles(projectId, projectName, projectDomainId, projectDomainName, roleId, roleName, roleDomainId, roleDomainName, typ string) *projectRoles {
|
||||
r := role{
|
||||
id: roleId,
|
||||
name: roleName,
|
||||
}
|
||||
r.domain.id = roleDomainId
|
||||
r.domain.name = roleDomainName
|
||||
pr := &projectRoles{id: projectId, name: projectName, typ: typ, roles: []role{r}}
|
||||
pr.domain.id = projectDomainId
|
||||
pr.domain.name = projectDomainName
|
||||
return pr
|
||||
}
|
||||
|
||||
func (this *projectRoles) add(roleId, roleName string) {
|
||||
this.roles = append(this.roles, role{id: roleId, name: roleName})
|
||||
func (this *projectRoles) add(roleId, roleName, roleDomainId, roleDomainName string) {
|
||||
r := role{id: roleId, name: roleName}
|
||||
r.domain.id = roleDomainId
|
||||
r.domain.name = roleDomainName
|
||||
this.roles = append(this.roles, r)
|
||||
}
|
||||
|
||||
func (this *projectRoles) json() jsonutils.JSONObject {
|
||||
obj := jsonutils.NewDict()
|
||||
obj.Add(jsonutils.NewString(this.id), "id")
|
||||
obj.Add(jsonutils.NewString(this.name), "name")
|
||||
obj.Add(jsonutils.NewString(this.domain.id), "domain", "id")
|
||||
obj.Add(jsonutils.NewString(this.domain.name), "domain", "name")
|
||||
obj.Add(jsonutils.NewString(this.typ), "type")
|
||||
roles := jsonutils.NewArray()
|
||||
for _, r := range this.roles {
|
||||
role := jsonutils.NewDict()
|
||||
role.Add(jsonutils.NewString(r.id), "id")
|
||||
role.Add(jsonutils.NewString(r.name), "name")
|
||||
role.Add(jsonutils.NewString(r.domain.id), "domain", "id")
|
||||
role.Add(jsonutils.NewString(r.domain.name), "domain", "name")
|
||||
roles.Add(role)
|
||||
}
|
||||
obj.Add(roles, "roles")
|
||||
@@ -67,13 +91,21 @@ func (this *projectRoles) json() jsonutils.JSONObject {
|
||||
}
|
||||
|
||||
type sRole struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Domain struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"domain"`
|
||||
}
|
||||
|
||||
type sGroupRole struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Domain struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"domain"`
|
||||
Roles []sRole `json:"roles"`
|
||||
Policies struct {
|
||||
Project []string `json:"project"`
|
||||
@@ -83,12 +115,16 @@ type sGroupRole struct {
|
||||
}
|
||||
|
||||
type sProjectGroupRole struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Domain struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"domain"`
|
||||
Groups []sGroupRole `json:"groups"`
|
||||
}
|
||||
|
||||
func (pgr *sProjectGroupRole) add(groupId, groupName, roleId, roleName string, projectPolicies, domainPolicies, systemPolicies []string) {
|
||||
func (pgr *sProjectGroupRole) add(groupId, groupName, groupDomainId, groupDomainName, roleId, roleName, roleDomainId, roleDomainName string, projectPolicies, domainPolicies, systemPolicies []string) {
|
||||
groupIdx := -1
|
||||
for i := range pgr.Groups {
|
||||
if pgr.Groups[i].Id == groupId {
|
||||
@@ -98,19 +134,25 @@ func (pgr *sProjectGroupRole) add(groupId, groupName, roleId, roleName string, p
|
||||
}
|
||||
if groupIdx < 0 {
|
||||
groupIdx = len(pgr.Groups)
|
||||
pgr.Groups = append(pgr.Groups, sGroupRole{
|
||||
gr := sGroupRole{
|
||||
Id: groupId,
|
||||
Name: groupName,
|
||||
})
|
||||
}
|
||||
gr.Domain.Id = groupDomainId
|
||||
gr.Domain.Name = groupDomainName
|
||||
pgr.Groups = append(pgr.Groups, gr)
|
||||
}
|
||||
pgr.Groups[groupIdx].add(roleId, roleName, projectPolicies, domainPolicies, systemPolicies)
|
||||
pgr.Groups[groupIdx].add(roleId, roleName, roleDomainId, roleDomainName, projectPolicies, domainPolicies, systemPolicies)
|
||||
}
|
||||
|
||||
func (gr *sGroupRole) add(roleId, roleName string, projectPolicies, domainPolicies, systemPolicies []string) {
|
||||
gr.Roles = append(gr.Roles, sRole{
|
||||
func (gr *sGroupRole) add(roleId, roleName, roleDomainId, roleDomainName string, projectPolicies, domainPolicies, systemPolicies []string) {
|
||||
sr := sRole{
|
||||
Id: roleId,
|
||||
Name: roleName,
|
||||
})
|
||||
}
|
||||
sr.Domain.Id = roleDomainId
|
||||
sr.Domain.Name = roleDomainName
|
||||
gr.Roles = append(gr.Roles, sr)
|
||||
for _, p := range projectPolicies {
|
||||
if !utils.IsInStringArray(p, gr.Policies.Project) {
|
||||
gr.Policies.Project = append(gr.Policies.Project, p)
|
||||
@@ -189,21 +231,27 @@ func (this *RoleAssignmentManagerV3) GetProjectUsers(s *mcclient.ClientSession,
|
||||
|
||||
roleId, _ := roleAssign.GetString("role", "id")
|
||||
roleName, _ := roleAssign.GetString("role", "name")
|
||||
roleDomainId, _ := roleAssign.GetString("role", "domain", "id")
|
||||
roleDomainName, _ := roleAssign.GetString("role", "domain", "name")
|
||||
userId, _ := roleAssign.GetString("user", "id")
|
||||
userName, _ := roleAssign.GetString("user", "name")
|
||||
userDomainId, _ := roleAssign.GetString("user", "domain", "id")
|
||||
userDomainName, _ := roleAssign.GetString("user", "domain", "name")
|
||||
|
||||
if len(userName) == 0 {
|
||||
typ = "group"
|
||||
userName, _ = roleAssign.GetString("group", "name")
|
||||
userId, _ = roleAssign.GetString("group", "id")
|
||||
userDomainId, _ = roleAssign.GetString("group", "domain", "id")
|
||||
userDomainName, _ = roleAssign.GetString("group", "domain", "name")
|
||||
}
|
||||
|
||||
_, ok := projects[userId]
|
||||
|
||||
if ok {
|
||||
projects[userId].add(roleId, roleName)
|
||||
projects[userId].add(roleId, roleName, roleDomainId, roleDomainName)
|
||||
} else {
|
||||
projects[userId] = newProjectRoles(userId, userName, roleId, roleName, typ)
|
||||
projects[userId] = newProjectRoles(userId, userName, userDomainId, userDomainName, roleId, roleName, roleDomainId, roleDomainName, typ)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,20 +339,27 @@ func (this *RoleAssignmentManagerV3) GetProjectRole(s *mcclient.ClientSession, i
|
||||
for _, roleAssign := range result.Data {
|
||||
roleId, _ := roleAssign.GetString("role", "id")
|
||||
roleName, _ := roleAssign.GetString("role", "name")
|
||||
roleDomainId, _ := roleAssign.GetString("role", "domain", "id")
|
||||
roleDomainName, _ := roleAssign.GetString("role", "domain", "name")
|
||||
|
||||
var groupById string
|
||||
var groupByName string
|
||||
var groupById, groupByName, groupByDomainId, groupByDomainName string
|
||||
|
||||
if groupBy == "project" {
|
||||
groupById, _ = roleAssign.GetString("scope", "project", "id")
|
||||
groupByName, _ = roleAssign.GetString("scope", "project", "name")
|
||||
groupByDomainId, _ = roleAssign.GetString("scope", "project", "domain", "id")
|
||||
groupByDomainName, _ = roleAssign.GetString("scope", "project", "domain", "name")
|
||||
} else if groupBy == "user" {
|
||||
groupById, _ = roleAssign.GetString("user", "id")
|
||||
groupByName, _ = roleAssign.GetString("user", "name")
|
||||
groupByDomainId, _ = roleAssign.GetString("user", "domain", "id")
|
||||
groupByDomainName, _ = roleAssign.GetString("user", "domain", "name")
|
||||
}
|
||||
|
||||
groupId, _ := roleAssign.GetString("group", "id")
|
||||
groupName, _ := roleAssign.GetString("group", "name")
|
||||
groupDomainId, _ := roleAssign.GetString("group", "domain", "id")
|
||||
groupDomainName, _ := roleAssign.GetString("group", "domain", "name")
|
||||
projPolicies, _ := jsonutils.GetStringArray(roleAssign, "policies", "project")
|
||||
domPolicies, _ := jsonutils.GetStringArray(roleAssign, "policies", "domain")
|
||||
sysPolicies, _ := jsonutils.GetStringArray(roleAssign, "policies", "system")
|
||||
@@ -319,13 +374,16 @@ func (this *RoleAssignmentManagerV3) GetProjectRole(s *mcclient.ClientSession, i
|
||||
|
||||
if lineIdx < 0 {
|
||||
lineIdx = len(lines)
|
||||
lines = append(lines, sProjectGroupRole{
|
||||
pgr := sProjectGroupRole{
|
||||
Id: groupById,
|
||||
Name: groupByName,
|
||||
})
|
||||
}
|
||||
pgr.Domain.Id = groupByDomainId
|
||||
pgr.Domain.Name = groupByDomainName
|
||||
lines = append(lines, pgr)
|
||||
}
|
||||
|
||||
lines[lineIdx].add(groupId, groupName, roleId, roleName, projPolicies, domPolicies, sysPolicies)
|
||||
lines[lineIdx].add(groupId, groupName, groupDomainId, groupDomainName, roleId, roleName, roleDomainId, roleDomainName, projPolicies, domPolicies, sysPolicies)
|
||||
}
|
||||
|
||||
lineJson := jsonutils.NewArray()
|
||||
|
||||
Reference in New Issue
Block a user