restructure and process additions and deleteions of relationships, roles and memberships
This commit is contained in:
@@ -16,47 +16,19 @@ type IDPrefixableResource interface {
|
||||
}
|
||||
|
||||
type Relationships struct {
|
||||
Relationships []Relationship
|
||||
Memberships []ResourceMemberships
|
||||
Resource IDPrefixableResource
|
||||
Parent Relation
|
||||
SubjectType ObjectType
|
||||
SubjectRelationships []Relation
|
||||
Memberships []ResourceMemberships
|
||||
}
|
||||
|
||||
func (r Relationships) DeDupe() Relationships {
|
||||
rels := make(map[string]bool)
|
||||
mems := make(map[string]bool)
|
||||
|
||||
var results Relationships
|
||||
|
||||
for _, rel := range r.Relationships {
|
||||
key := rel.Resource.PrefixedID().String() + "/" + string(rel.Relation) + "/" + rel.RelatedResource.PrefixedID().String()
|
||||
|
||||
if _, ok := rels[key]; !ok {
|
||||
rels[key] = true
|
||||
|
||||
results.Relationships = append(results.Relationships, rel)
|
||||
}
|
||||
}
|
||||
|
||||
for _, member := range r.Memberships {
|
||||
key := member.Resource.PrefixedID().String() + "/" + member.Role + "/" + member.Member.PrefixedID().String()
|
||||
|
||||
if _, ok := mems[key]; !ok {
|
||||
mems[key] = true
|
||||
|
||||
results.Memberships = append(results.Memberships, member)
|
||||
}
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
type Relationship struct {
|
||||
Resource IDPrefixableResource
|
||||
Relation RelationshipType
|
||||
RelatedResource IDPrefixableResource
|
||||
type Relation struct {
|
||||
Relation RelationshipType
|
||||
Resource IDPrefixableResource
|
||||
}
|
||||
|
||||
type ResourceMemberships struct {
|
||||
Resource IDPrefixableResource
|
||||
Role string
|
||||
Member IDPrefixableResource
|
||||
Role string
|
||||
Member IDPrefixableResource
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user