Skip to content

Commit

Permalink
chore: remove support for multiple queries in GetRelationTuples (#304)
Browse files Browse the repository at this point in the history
Closes #299
  • Loading branch information
zepatrik committed Nov 10, 2020
1 parent a3ca0b8 commit 8d3ab23
Show file tree
Hide file tree
Showing 11 changed files with 117 additions and 125 deletions.
4 changes: 2 additions & 2 deletions check/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (e *Engine) subjectIsAllowed(ctx context.Context, requested *models.Interna
prevRelationsLen := len(subjectRelations)

// compute one indirection
indirect, err := e.d.RelationTupleManager().GetRelationTuples(ctx, []*models.RelationQuery{{Subject: sr.DeriveSubject()}})
indirect, err := e.d.RelationTupleManager().GetRelationTuples(ctx, &models.RelationQuery{Subject: sr.DeriveSubject()})
if err != nil {
// TODO fix error handling
_, _ = fmt.Fprintf(os.Stderr, "%+v", err)
Expand Down Expand Up @@ -82,7 +82,7 @@ func (e *Engine) subjectIsAllowed(ctx context.Context, requested *models.Interna
}

func (e *Engine) SubjectIsAllowed(ctx context.Context, r *models.InternalRelationTuple) (bool, error) {
subjectRelations, err := e.d.RelationTupleManager().GetRelationTuples(ctx, []*models.RelationQuery{{Subject: r.Subject}})
subjectRelations, err := e.d.RelationTupleManager().GetRelationTuples(ctx, &models.RelationQuery{Subject: r.Subject})
if err != nil {
return false, err
}
Expand Down
6 changes: 3 additions & 3 deletions cmd/relationtuple/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ func newGetCmd() *cobra.Command {
return err
}
resp, err := cl.ReadRelationTuples(context.Background(), &models.ReadRelationTuplesRequest{
TupleSets: []*models.ReadRelationTuplesRequest_Query{query},
Page: 0,
PerPage: 100,
Query: query,
Page: 0,
PerPage: 100,
})
if err != nil {
_, _ = fmt.Fprintf(cmd.ErrOrStderr(), "Could not make request: %s\n", err)
Expand Down
4 changes: 2 additions & 2 deletions expand/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ func (e *Engine) BuildTree(ctx context.Context, subject models.Subject, restDept
Subject: subject,
}

rels, err := e.d.RelationTupleManager().GetRelationTuples(ctx, []*models.RelationQuery{{
rels, err := e.d.RelationTupleManager().GetRelationTuples(ctx, &models.RelationQuery{
Relation: us.Relation,
Object: us.Object,
}})
})
if err != nil {
// TODO error handling
return nil, err
Expand Down
150 changes: 75 additions & 75 deletions models/relation.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion models/relation.proto
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ message ReadRelationTuplesRequest {
// All conditions are concatenated with
// an OR operator. If any query matches
// the relation will be in the response
repeated Query tuple_sets = 1;
Query query = 1;
int32 page = 2;
int32 per_page = 3;
}
Expand Down
8 changes: 7 additions & 1 deletion persistence/definitions.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
package persistence

type Persister interface{}
import (
"github.com/ory/keto/relationtuple"
)

type Persister interface {
relationtuple.Manager
}
20 changes: 8 additions & 12 deletions persistence/memory/relations.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,25 +61,21 @@ func buildRelationQueryFilter(query *models.RelationQuery) queryFilter {
}
}

func (p *Persister) GetRelationTuples(_ context.Context, queries []*models.RelationQuery, options ...relationtuple.PaginationOptionSetter) ([]*models.InternalRelationTuple, error) {
func (p *Persister) GetRelationTuples(_ context.Context, query *models.RelationQuery, options ...relationtuple.PaginationOptionSetter) ([]*models.InternalRelationTuple, error) {
p.RLock()
defer p.RUnlock()

filters := make([]queryFilter, len(queries))
for i, q := range queries {
filters[i] = buildRelationQueryFilter(q)
if query == nil {
return nil, nil
}

filter := buildRelationQueryFilter(query)

var res []*models.InternalRelationTuple
for _, r := range p.relations {
for _, filter := range filters {
// this is lazy-evaluating the OR of all filters
if filter(r) {
// If one filter matches add relation to response and break inner loop
// to check next relation
res = append(res, r)
break
}
if filter(r) {
// If one filter matches add relation to response
res = append(res, r)
}
}

Expand Down

0 comments on commit 8d3ab23

Please sign in to comment.