restructure and process additions and deleteions of relationships, roles and memberships
This commit is contained in:
@@ -13,14 +13,12 @@ const organizationEvent = "metalorganization"
|
||||
|
||||
func (s *service) buildOrganizationRelationships(org *models.OrganizationDetails) (Relationships, error) {
|
||||
relations := Relationships{
|
||||
Relationships: []Relationship{
|
||||
// Related org to the root tenant.
|
||||
{
|
||||
Resource: org,
|
||||
Relation: RelateParent,
|
||||
RelatedResource: s.rootResource,
|
||||
},
|
||||
Resource: org,
|
||||
Parent: Relation{
|
||||
Relation: RelateParent,
|
||||
Resource: s.rootResource,
|
||||
},
|
||||
SubjectType: TypeProject,
|
||||
}
|
||||
|
||||
for _, member := range org.Memberships {
|
||||
@@ -32,35 +30,17 @@ func (s *service) buildOrganizationRelationships(org *models.OrganizationDetails
|
||||
}
|
||||
|
||||
relations.Memberships = append(relations.Memberships, ResourceMemberships{
|
||||
Resource: org,
|
||||
Role: role,
|
||||
Member: member.User,
|
||||
Role: role,
|
||||
Member: member.User,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
for _, project := range org.Projects {
|
||||
relations.Relationships = append(relations.Relationships, Relationship{
|
||||
Resource: project,
|
||||
Relation: RelateParent,
|
||||
RelatedResource: org,
|
||||
relations.SubjectRelationships = append(relations.SubjectRelationships, Relation{
|
||||
Resource: project,
|
||||
Relation: RelateParent,
|
||||
})
|
||||
|
||||
for _, member := range project.Memberships {
|
||||
for _, role := range member.Roles {
|
||||
if _, ok := s.roles[role]; !ok {
|
||||
s.logger.Warnf("unrecognized project role '%s' for %s on %s", role, member.User.PrefixedID(), project.PrefixedID())
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
relations.Memberships = append(relations.Memberships, ResourceMemberships{
|
||||
Resource: project,
|
||||
Role: role,
|
||||
Member: member.User,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return relations, nil
|
||||
@@ -91,10 +71,15 @@ func (s *service) TouchOrganization(ctx context.Context, id gidx.PrefixedID) err
|
||||
return err
|
||||
}
|
||||
|
||||
s.processRelationships(ctx, organizationEvent, relationships.Relationships)
|
||||
s.syncMemberships(ctx, relationships.Memberships)
|
||||
relationshipChanges := s.processRelationships(ctx, organizationEvent, relationships)
|
||||
rolesChanged, assignmentsChanged := s.syncMemberships(ctx, relationships, false)
|
||||
|
||||
s.logger.Infow("organization sync complete", "relationships", len(relationships.Relationships), "memberships", len(relationships.Memberships))
|
||||
s.logger.Infow("organization sync complete",
|
||||
"resource.id", org.PrefixedID(),
|
||||
"relationships.changed", relationshipChanges,
|
||||
"membership.roles_changed", rolesChanged,
|
||||
"membership.assignments_changed", assignmentsChanged,
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user