Skip to content

Commit

Permalink
feat: add gRPC client utils helpers (#657)
Browse files Browse the repository at this point in the history
Behold! The Keto gRPC client library now has useful helpers that allow you to replace:

```diff
- deltas := make([]*acl.RelationTupleDelta, len(tuples))
- for i := range rts {
- 	deltas[i] = &acl.RelationTupleDelta{
- 		Action:        acl.RelationTupleDelta_INSERT,
- 		RelationTuple: rts[i],
- 	}
- }
+ deltas := acl.RelationTupleToDeltas(tuples, acl.RelationTupleDelta_INSERT)
```

and

```diff
- &acl.Subject{Ref: &acl.Subject_Set{Set: &acl.SubjectSet{
- 	Namespace: "directories",
- 	Object:    "/photos",
- 	Relation:  "access",
- }}}
+ acl.NewSubjectSet("directories", "/photos", "access")
```

and

```diff
- &acl.Subject{Ref: &acl.Subject_Id{
- 	Id: "user1",
- }}
+ acl.NewSubjectID("user1")
```

Enjoy these new treats 🍫 🍭 🍦
  • Loading branch information
zepatrik committed Jul 13, 2021
1 parent 977e39c commit 8b18802
Show file tree
Hide file tree
Showing 13 changed files with 157 additions and 2,431 deletions.
3 changes: 3 additions & 0 deletions .circleci/config.yml
Expand Up @@ -42,6 +42,9 @@ jobs:
- run: go mod tidy
- go/save-cache

- run: cd proto; go mod tidy
- run: cd proto; go test ./...

# Tests
- run: .bin/go-acc -o coverage.txt ./... -- -v -tags sqlite -p 1

Expand Down
Expand Up @@ -27,52 +27,32 @@ func main() {
//files:/photos/mountains.jpg#access@(files:/photos/mountains.jpg#owner)
//files:/photos/mountains.jpg#access@(directories:/photos#access)

tupleDeltas := []*acl.RelationTupleDelta{
tuples := []*acl.RelationTuple{
// ownership
{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "directories",
Object: "/photos",
Relation: "owner",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "maureen",
}},
},
Namespace: "directories",
Object: "/photos",
Relation: "owner",
Subject: acl.NewSubjectID("maureen"),
},
{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "files",
Object: "/photos/beach.jpg",
Relation: "owner",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "maureen",
}},
},
Namespace: "files",
Object: "/photos/beach.jpg",
Relation: "owner",
Subject: acl.NewSubjectID("maureen"),
},
{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "files",
Object: "/photos/mountains.jpg",
Relation: "owner",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "laura",
}},
},
Namespace: "files",
Object: "/photos/mountains.jpg",
Relation: "owner",
Subject: acl.NewSubjectID("laura"),
},
// granted access
{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "directories",
Object: "/photos",
Relation: "access",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "laura",
}},
},
Namespace: "directories",
Object: "/photos",
Relation: "access",
Subject: acl.NewSubjectID("laura"),
},
}
// should be subject set rewrite
Expand All @@ -82,40 +62,26 @@ func main() {
{"files", "/photos/mountains.jpg"},
{"directories", "/photos"},
} {
tupleDeltas = append(tupleDeltas, &acl.RelationTupleDelta{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: o.n,
Object: o.o,
Relation: "access",
Subject: &acl.Subject{Ref: &acl.Subject_Set{Set: &acl.SubjectSet{
Namespace: o.n,
Object: o.o,
Relation: "owner",
}}},
},
tuples = append(tuples, &acl.RelationTuple{
Namespace: o.n,
Object: o.o,
Relation: "access",
Subject: acl.NewSubjectSet(o.n, o.o, "owner"),
})
}
// should be subject set rewrite
// access on parent means access on child
for _, obj := range []string{"/photos/beach.jpg", "/photos/mountains.jpg"} {
tupleDeltas = append(tupleDeltas, &acl.RelationTupleDelta{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "files",
Object: obj,
Relation: "access",
Subject: &acl.Subject{Ref: &acl.Subject_Set{Set: &acl.SubjectSet{
Namespace: "directories",
Object: "/photos",
Relation: "access",
}}},
},
tuples = append(tuples, &acl.RelationTuple{
Namespace: "files",
Object: obj,
Relation: "access",
Subject: acl.NewSubjectSet("directories", "/photos", "access"),
})
}

_, err = client.TransactRelationTuples(context.Background(), &acl.TransactRelationTuplesRequest{
RelationTupleDeltas: tupleDeltas,
RelationTupleDeltas: acl.RelationTupleToDeltas(tuples, acl.RelationTupleDelta_INSERT),
})
if err != nil {
panic("Encountered error: " + err.Error())
Expand Down
Expand Up @@ -21,13 +21,7 @@ func main() {
client := acl.NewExpandServiceClient(conn)

res, err := client.Expand(context.Background(), &acl.ExpandRequest{
Subject: &acl.Subject{
Ref: &acl.Subject_Set{Set: &acl.SubjectSet{
Namespace: "files",
Object: "/photos/beach.jpg",
Relation: "access",
}},
},
Subject: acl.NewSubjectSet("files", "/photos/beach.jpg", "access"),
MaxDepth: 3,
})
if err != nil {
Expand Down
Expand Up @@ -17,52 +17,37 @@ func main() {

client := acl.NewWriteServiceClient(conn)

var tupleDeltas []*acl.RelationTupleDelta
var tuples []*acl.RelationTuple
// memes
for _, user := range []string{"PM", "Vincent", "Julia"} {
tupleDeltas = append(tupleDeltas, &acl.RelationTupleDelta{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "chats",
Object: "memes",
Relation: "member",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: user,
}},
},
tuples = append(tuples, &acl.RelationTuple{
Namespace: "chats",
Object: "memes",
Relation: "member",
Subject: acl.NewSubjectID(user),
})
}
// cars
for _, user := range []string{"PM", "Julia"} {
tupleDeltas = append(tupleDeltas, &acl.RelationTupleDelta{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "chats",
Object: "cars",
Relation: "member",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: user,
}},
},
tuples = append(tuples, &acl.RelationTuple{
Namespace: "chats",
Object: "cars",
Relation: "member",
Subject: acl.NewSubjectID(user),
})
}
// coffee-break
for _, user := range []string{"PM", "Vincent", "Julia", "Patrik"} {
tupleDeltas = append(tupleDeltas, &acl.RelationTupleDelta{
Action: acl.RelationTupleDelta_INSERT,
RelationTuple: &acl.RelationTuple{
Namespace: "chats",
Object: "coffee-break",
Relation: "member",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: user,
}},
},
tuples = append(tuples, &acl.RelationTuple{
Namespace: "chats",
Object: "coffee-break",
Relation: "member",
Subject: acl.NewSubjectID(user),
})
}

_, err = client.TransactRelationTuples(context.Background(), &acl.TransactRelationTuplesRequest{
RelationTupleDeltas: tupleDeltas,
RelationTupleDeltas: acl.RelationTupleToDeltas(tuples, acl.RelationTupleDelta_INSERT),
})
if err != nil {
panic("Encountered error: " + err.Error())
Expand Down
Expand Up @@ -21,9 +21,7 @@ func main() {
Query: &acl.ListRelationTuplesRequest_Query{
Namespace: "chats",
Relation: "member",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "PM",
}},
Subject: acl.NewSubjectID("PM"),
},
})
if err != nil {
Expand Down
Expand Up @@ -25,9 +25,7 @@ func main() {
Namespace: "messages",
Object: "02y_15_4w350m3",
Relation: "decypher",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "john",
}},
Subject: acl.NewSubjectID("john"),
},
},
},
Expand Down
Expand Up @@ -21,9 +21,7 @@ func main() {
Namespace: "messages",
Object: "02y_15_4w350m3",
Relation: "decypher",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "john",
}},
Subject: acl.NewSubjectID("john"),
})
if err != nil {
panic(err.Error())
Expand Down
Expand Up @@ -25,9 +25,7 @@ func main() {
Namespace: "messages",
Object: "02y_15_4w350m3",
Relation: "decypher",
Subject: &acl.Subject{Ref: &acl.Subject_Id{
Id: "john",
}},
Subject: acl.NewSubjectID("john"),
},
Action: acl.RelationTupleDelta_DELETE,
},
Expand Down

0 comments on commit 8b18802

Please sign in to comment.