arykalin
01/24/2024, 8:15 AMgo
if _, err := p.Cli.WriteRelationships(ctx, &v1.WriteRelationshipsRequest{Updates: []*v1.RelationshipUpdate{
{
Operation: v1.RelationshipUpdate_OPERATION_TOUCH,
Relationship: &v1.Relationship{
Resource: &v1.ObjectReference{
ObjectId: rel.ResourceId,
ObjectType: rel.ResourceType,
},
Relation: rel.Relation,
Subject: &v1.SubjectReference{
Object: &v1.ObjectReference{
ObjectId: rel.SubjectId,
ObjectType: rel.SubjectType,
},
},
OptionalCaveat: caveat,
},
},
},
}); err != nil {
return fmt.Errorf("failed to add relation [%+v]: %w", rel, err)
}
And this is how I'm trying to fetch the newly created relationship:
go
resp, err := p.Cli.ReadRelationships(ctxWithTimeout, &v1.ReadRelationshipsRequest{
Consistency: nil,
RelationshipFilter: &v1.RelationshipFilter{
ResourceType: rel.ResourceType,
OptionalResourceId: rel.ResourceId,
OptionalRelation: rel.Relation,
OptionalSubjectFilter: &v1.SubjectFilter{
SubjectType: rel.SubjectType,
OptionalSubjectId: rel.SubjectId,
},
},
OptionalLimit: 0,
OptionalCursor: nil,
})
if err != nil {
return fmt.Errorf("failed to show relationships: %w", err)
}
for {
var item *v1.ReadRelationshipsResponse
item, err = resp.Recv()
if err == io.EOF {
break
}
if err != nil {
return fmt.Errorf("failed to read relationship from response: %w", err)
}
pbRel := item.GetRelationship()
if pbRel.GetResource().GetObjectId() == rel.ResourceId && pbRel.GetResource().GetObjectType() == rel.ResourceType {
return nil
}
}