Skip to content

Commit 0bae604

Browse files
committed
feat!: abac and conditions support in OpenFgaApi
1 parent 868313b commit 0bae604

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2720
-291
lines changed

.openapi-generator/FILES

+20-2
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@ docs/Any.md
2323
docs/Assertion.md
2424
docs/AuthorizationModel.md
2525
docs/CheckRequest.md
26+
docs/CheckRequestTupleKey.md
2627
docs/CheckResponse.md
2728
docs/Computed.md
29+
docs/Condition.md
30+
docs/ConditionParamTypeRef.md
2831
docs/ContextualTupleKeys.md
2932
docs/CreateStoreRequest.md
3033
docs/CreateStoreResponse.md
3134
docs/Difference.md
3235
docs/ErrorCode.md
3336
docs/ExpandRequest.md
37+
docs/ExpandRequestTupleKey.md
3438
docs/ExpandResponse.md
3539
docs/GetStoreResponse.md
3640
docs/InternalErrorCode.md
@@ -43,6 +47,7 @@ docs/Metadata.md
4347
docs/Node.md
4448
docs/Nodes.md
4549
docs/NotFoundErrorCode.md
50+
docs/NullValue.md
4651
docs/ObjectRelation.md
4752
docs/OpenFgaApi.md
4853
docs/PathUnknownErrorMessageResponse.md
@@ -51,18 +56,20 @@ docs/ReadAuthorizationModelResponse.md
5156
docs/ReadAuthorizationModelsResponse.md
5257
docs/ReadChangesResponse.md
5358
docs/ReadRequest.md
59+
docs/ReadRequestTupleKey.md
5460
docs/ReadResponse.md
5561
docs/RelationMetadata.md
5662
docs/RelationReference.md
63+
docs/RelationshipCondition.md
5764
docs/Status.md
5865
docs/Store.md
5966
docs/Tuple.md
6067
docs/TupleChange.md
6168
docs/TupleKey.md
62-
docs/TupleKeys.md
6369
docs/TupleOperation.md
6470
docs/TupleToUserset.md
6571
docs/TypeDefinition.md
72+
docs/TypeName.md
6673
docs/Users.md
6774
docs/Userset.md
6875
docs/UsersetTree.md
@@ -74,6 +81,8 @@ docs/WriteAssertionsRequest.md
7481
docs/WriteAuthorizationModelRequest.md
7582
docs/WriteAuthorizationModelResponse.md
7683
docs/WriteRequest.md
84+
docs/WriteRequestTupleKey.md
85+
docs/WriteRequestTupleKeys.md
7786
git_push.sh
7887
go.mod
7988
go.sum
@@ -84,14 +93,18 @@ model_any.go
8493
model_assertion.go
8594
model_authorization_model.go
8695
model_check_request.go
96+
model_check_request_tuple_key.go
8797
model_check_response.go
8898
model_computed.go
99+
model_condition.go
100+
model_condition_param_type_ref.go
89101
model_contextual_tuple_keys.go
90102
model_create_store_request.go
91103
model_create_store_response.go
92104
model_difference.go
93105
model_error_code.go
94106
model_expand_request.go
107+
model_expand_request_tuple_key.go
95108
model_expand_response.go
96109
model_get_store_response.go
97110
model_internal_error_code.go
@@ -104,25 +117,28 @@ model_metadata.go
104117
model_node.go
105118
model_nodes.go
106119
model_not_found_error_code.go
120+
model_null_value.go
107121
model_object_relation.go
108122
model_path_unknown_error_message_response.go
109123
model_read_assertions_response.go
110124
model_read_authorization_model_response.go
111125
model_read_authorization_models_response.go
112126
model_read_changes_response.go
113127
model_read_request.go
128+
model_read_request_tuple_key.go
114129
model_read_response.go
115130
model_relation_metadata.go
116131
model_relation_reference.go
132+
model_relationship_condition.go
117133
model_status.go
118134
model_store.go
119135
model_tuple.go
120136
model_tuple_change.go
121137
model_tuple_key.go
122-
model_tuple_keys.go
123138
model_tuple_operation.go
124139
model_tuple_to_userset.go
125140
model_type_definition.go
141+
model_type_name.go
126142
model_users.go
127143
model_userset.go
128144
model_userset_tree.go
@@ -134,6 +150,8 @@ model_write_assertions_request.go
134150
model_write_authorization_model_request.go
135151
model_write_authorization_model_response.go
136152
model_write_request.go
153+
model_write_request_tuple_key.go
154+
model_write_request_tuple_keys.go
137155
oauth2/LICENSE
138156
oauth2/ORIGINAL_AUTHORS
139157
oauth2/ORIGINAL_CONTRIBUTORS

README.md

+10-1
Original file line numberDiff line numberDiff line change
@@ -801,14 +801,18 @@ Class | Method | HTTP request | Description
801801
- [Assertion](docs/Assertion.md)
802802
- [AuthorizationModel](docs/AuthorizationModel.md)
803803
- [CheckRequest](docs/CheckRequest.md)
804+
- [CheckRequestTupleKey](docs/CheckRequestTupleKey.md)
804805
- [CheckResponse](docs/CheckResponse.md)
805806
- [Computed](docs/Computed.md)
807+
- [Condition](docs/Condition.md)
808+
- [ConditionParamTypeRef](docs/ConditionParamTypeRef.md)
806809
- [ContextualTupleKeys](docs/ContextualTupleKeys.md)
807810
- [CreateStoreRequest](docs/CreateStoreRequest.md)
808811
- [CreateStoreResponse](docs/CreateStoreResponse.md)
809812
- [Difference](docs/Difference.md)
810813
- [ErrorCode](docs/ErrorCode.md)
811814
- [ExpandRequest](docs/ExpandRequest.md)
815+
- [ExpandRequestTupleKey](docs/ExpandRequestTupleKey.md)
812816
- [ExpandResponse](docs/ExpandResponse.md)
813817
- [GetStoreResponse](docs/GetStoreResponse.md)
814818
- [InternalErrorCode](docs/InternalErrorCode.md)
@@ -821,25 +825,28 @@ Class | Method | HTTP request | Description
821825
- [Node](docs/Node.md)
822826
- [Nodes](docs/Nodes.md)
823827
- [NotFoundErrorCode](docs/NotFoundErrorCode.md)
828+
- [NullValue](docs/NullValue.md)
824829
- [ObjectRelation](docs/ObjectRelation.md)
825830
- [PathUnknownErrorMessageResponse](docs/PathUnknownErrorMessageResponse.md)
826831
- [ReadAssertionsResponse](docs/ReadAssertionsResponse.md)
827832
- [ReadAuthorizationModelResponse](docs/ReadAuthorizationModelResponse.md)
828833
- [ReadAuthorizationModelsResponse](docs/ReadAuthorizationModelsResponse.md)
829834
- [ReadChangesResponse](docs/ReadChangesResponse.md)
830835
- [ReadRequest](docs/ReadRequest.md)
836+
- [ReadRequestTupleKey](docs/ReadRequestTupleKey.md)
831837
- [ReadResponse](docs/ReadResponse.md)
832838
- [RelationMetadata](docs/RelationMetadata.md)
833839
- [RelationReference](docs/RelationReference.md)
840+
- [RelationshipCondition](docs/RelationshipCondition.md)
834841
- [Status](docs/Status.md)
835842
- [Store](docs/Store.md)
836843
- [Tuple](docs/Tuple.md)
837844
- [TupleChange](docs/TupleChange.md)
838845
- [TupleKey](docs/TupleKey.md)
839-
- [TupleKeys](docs/TupleKeys.md)
840846
- [TupleOperation](docs/TupleOperation.md)
841847
- [TupleToUserset](docs/TupleToUserset.md)
842848
- [TypeDefinition](docs/TypeDefinition.md)
849+
- [TypeName](docs/TypeName.md)
843850
- [Users](docs/Users.md)
844851
- [Userset](docs/Userset.md)
845852
- [UsersetTree](docs/UsersetTree.md)
@@ -851,6 +858,8 @@ Class | Method | HTTP request | Description
851858
- [WriteAuthorizationModelRequest](docs/WriteAuthorizationModelRequest.md)
852859
- [WriteAuthorizationModelResponse](docs/WriteAuthorizationModelResponse.md)
853860
- [WriteRequest](docs/WriteRequest.md)
861+
- [WriteRequestTupleKey](docs/WriteRequestTupleKey.md)
862+
- [WriteRequestTupleKeys](docs/WriteRequestTupleKeys.md)
854863

855864

856865
## Contributing

api_open_fga.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ type OpenFgaApi interface {
252252
}
253253
```
254254
This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store.
255-
The continuation token will be empty if there are no more tuples to query.
256-
### Query for all stored relationship tuples that have a particular relation and object
255+
The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object
257256
To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of
258257
```json
259258
{
@@ -2574,8 +2573,7 @@ The API will return tuples and a continuation token, something like
25742573
25752574
```
25762575
This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store.
2577-
The continuation token will be empty if there are no more tuples to query.
2578-
### Query for all stored relationship tuples that have a particular relation and object
2576+
The continuation token will be empty if there are no more tuples to query.### Query for all stored relationship tuples that have a particular relation and object
25792577
To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of
25802578
```json
25812579

api_open_fga_test.go

+49-49
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,10 @@ func TestOpenFgaApi(t *testing.T) {
569569
RequestPath: "check",
570570
}
571571
requestBody := CheckRequest{
572-
TupleKey: TupleKey{
573-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
574-
Relation: PtrString("viewer"),
575-
Object: PtrString("document:roadmap"),
572+
TupleKey: CheckRequestTupleKey{
573+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
574+
Relation: "viewer",
575+
Object: "document:roadmap",
576576
},
577577
AuthorizationModelId: PtrString("01GAHCE4YVKPQEKZQHT2R89MQV"),
578578
}
@@ -621,11 +621,11 @@ func TestOpenFgaApi(t *testing.T) {
621621
RequestPath: "write",
622622
}
623623
requestBody := WriteRequest{
624-
Writes: &TupleKeys{
625-
TupleKeys: []TupleKey{{
626-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
627-
Relation: PtrString("viewer"),
628-
Object: PtrString("document:roadmap"),
624+
Writes: &WriteRequestTupleKeys{
625+
TupleKeys: []WriteRequestTupleKey{{
626+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
627+
Relation: "viewer",
628+
Object: "document:roadmap",
629629
}},
630630
},
631631
AuthorizationModelId: PtrString("01GAHCE4YVKPQEKZQHT2R89MQV"),
@@ -667,11 +667,11 @@ func TestOpenFgaApi(t *testing.T) {
667667
}
668668

669669
requestBody := WriteRequest{
670-
Deletes: &TupleKeys{
671-
TupleKeys: []TupleKey{{
672-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
673-
Relation: PtrString("viewer"),
674-
Object: PtrString("document:roadmap"),
670+
Deletes: &WriteRequestTupleKeys{
671+
TupleKeys: []WriteRequestTupleKey{{
672+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
673+
Relation: "viewer",
674+
Object: "document:roadmap",
675675
}},
676676
},
677677
AuthorizationModelId: PtrString("01GAHCE4YVKPQEKZQHT2R89MQV"),
@@ -713,9 +713,9 @@ func TestOpenFgaApi(t *testing.T) {
713713
}
714714

715715
requestBody := ExpandRequest{
716-
TupleKey: TupleKey{
717-
Relation: PtrString("viewer"),
718-
Object: PtrString("document:roadmap"),
716+
TupleKey: ExpandRequestTupleKey{
717+
Relation: "viewer",
718+
Object: "document:roadmap",
719719
},
720720
AuthorizationModelId: PtrString("01GAHCE4YVKPQEKZQHT2R89MQV"),
721721
}
@@ -761,7 +761,7 @@ func TestOpenFgaApi(t *testing.T) {
761761
}
762762

763763
requestBody := ReadRequest{
764-
TupleKey: &TupleKey{
764+
TupleKey: &ReadRequestTupleKey{
765765
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
766766
Relation: PtrString("viewer"),
767767
Object: PtrString("document:roadmap"),
@@ -866,14 +866,14 @@ func TestOpenFgaApi(t *testing.T) {
866866
Relation: "can_read",
867867
Type: "document",
868868
ContextualTuples: &ContextualTupleKeys{
869-
TupleKeys: []TupleKey{{
870-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
871-
Relation: PtrString("editor"),
872-
Object: PtrString("folder:product"),
869+
TupleKeys: []WriteRequestTupleKey{{
870+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
871+
Relation: "editor",
872+
Object: "folder:product",
873873
}, {
874-
User: PtrString("folder:product"),
875-
Relation: PtrString("parent"),
876-
Object: PtrString("document:roadmap"),
874+
User: "folder:product",
875+
Relation: "parent",
876+
Object: "document:roadmap",
877877
}},
878878
},
879879
}
@@ -924,10 +924,10 @@ func TestOpenFgaApi(t *testing.T) {
924924
RequestPath: "check",
925925
}
926926
requestBody := CheckRequest{
927-
TupleKey: TupleKey{
928-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
929-
Relation: PtrString("viewer"),
930-
Object: PtrString("document:roadmap"),
927+
TupleKey: CheckRequestTupleKey{
928+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
929+
Relation: "viewer",
930+
Object: "document:roadmap",
931931
},
932932
}
933933

@@ -987,10 +987,10 @@ func TestOpenFgaApi(t *testing.T) {
987987
RequestPath: "check",
988988
}
989989
requestBody := CheckRequest{
990-
TupleKey: TupleKey{
991-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
992-
Relation: PtrString("viewer"),
993-
Object: PtrString("document:roadmap"),
990+
TupleKey: CheckRequestTupleKey{
991+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
992+
Relation: "viewer",
993+
Object: "document:roadmap",
994994
},
995995
}
996996

@@ -1043,10 +1043,10 @@ func TestOpenFgaApi(t *testing.T) {
10431043
RequestPath: "check",
10441044
}
10451045
requestBody := CheckRequest{
1046-
TupleKey: TupleKey{
1047-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
1048-
Relation: PtrString("viewer"),
1049-
Object: PtrString("document:roadmap"),
1046+
TupleKey: CheckRequestTupleKey{
1047+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
1048+
Relation: "viewer",
1049+
Object: "document:roadmap",
10501050
},
10511051
}
10521052

@@ -1106,10 +1106,10 @@ func TestOpenFgaApi(t *testing.T) {
11061106
RequestPath: "check",
11071107
}
11081108
requestBody := CheckRequest{
1109-
TupleKey: TupleKey{
1110-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
1111-
Relation: PtrString("viewer"),
1112-
Object: PtrString("document:roadmap"),
1109+
TupleKey: CheckRequestTupleKey{
1110+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
1111+
Relation: "viewer",
1112+
Object: "document:roadmap",
11131113
},
11141114
}
11151115

@@ -1177,10 +1177,10 @@ func TestOpenFgaApi(t *testing.T) {
11771177
RequestPath: "check",
11781178
}
11791179
requestBody := CheckRequest{
1180-
TupleKey: TupleKey{
1181-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
1182-
Relation: PtrString("viewer"),
1183-
Object: PtrString("document:roadmap"),
1180+
TupleKey: CheckRequestTupleKey{
1181+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
1182+
Relation: "viewer",
1183+
Object: "document:roadmap",
11841184
},
11851185
}
11861186

@@ -1239,10 +1239,10 @@ func TestOpenFgaApi(t *testing.T) {
12391239
RequestPath: "check",
12401240
}
12411241
requestBody := CheckRequest{
1242-
TupleKey: TupleKey{
1243-
User: PtrString("user:81684243-9356-4421-8fbf-a4f8d36aa31b"),
1244-
Relation: PtrString("viewer"),
1245-
Object: PtrString("document:roadmap"),
1242+
TupleKey: CheckRequestTupleKey{
1243+
User: "user:81684243-9356-4421-8fbf-a4f8d36aa31b",
1244+
Relation: "viewer",
1245+
Object: "document:roadmap",
12461246
},
12471247
}
12481248

0 commit comments

Comments
 (0)