update permissions relationships calls to use from/to

This commit is contained in:
Mike Mason
2023-07-18 19:48:52 +00:00
parent 321e872b46
commit 44fd32567b
5 changed files with 49 additions and 44 deletions

View File

@@ -17,10 +17,10 @@ func (s *service) processRelationships(ctx context.Context, eventType string, re
wantParentRelationship, wantSubjectRelationships := s.mapRelationWants(relationships)
liveParentRelationships, liveSubjectRelationships, err := s.getRelationshipMap(ctx, relationships.Resource, relationships.SubjectType)
liveParentRelationships, liveSubjectRelationships, err := s.getRelationshipMap(ctx, relationships.Resource, relationships.SubjectRelation)
if err != nil {
rlogger.Errorw("failed to get relationship map",
"relationships.subject_type", relationships.SubjectType,
"relationships.subject_relation", relationships.SubjectRelation,
"error", err,
)
@@ -177,16 +177,16 @@ func (s *service) mapRelationWants(relationships Relationships) (*Relation, map[
// getRelationshipMap fetches the provided resources relationships, as the source resource and the destination subject.
// Returned are two maps, the first maps Subject IDs -> Relationship
// The second map, maps Resource IDs -> relationship
func (s *service) getRelationshipMap(ctx context.Context, resource IDPrefixableResource, relatedObjectType ObjectType) (map[gidx.PrefixedID]RelationshipType, map[gidx.PrefixedID]RelationshipType, error) {
liveResource, err := s.perms.ListResourceRelationships(ctx, resource.PrefixedID(), "")
func (s *service) getRelationshipMap(ctx context.Context, resource IDPrefixableResource, relation RelationshipType) (map[gidx.PrefixedID]RelationshipType, map[gidx.PrefixedID]RelationshipType, error) {
liveResource, err := s.perms.ListResourceRelationshipsFrom(ctx, resource.PrefixedID())
if err != nil {
return nil, nil, err
}
var liveSubject []permissions.ResourceRelationship
if relatedObjectType != "" {
liveSubject, err = s.perms.ListResourceRelationships(ctx, resource.PrefixedID(), relatedObjectType.Prefix())
if relation != "" {
liveSubject, err = s.perms.ListResourceRelationshipsTo(ctx, resource.PrefixedID())
if err != nil {
return nil, nil, err
}
@@ -205,6 +205,10 @@ func (s *service) getRelationshipMap(ctx context.Context, resource IDPrefixableR
subject := make(map[gidx.PrefixedID]RelationshipType, len(liveSubject))
for _, relationship := range liveSubject {
if relationship.Relation != string(relation) {
continue
}
subject[relationship.ResourceID] = RelationshipType(relationship.Relation)
}