Skip to content

Commit b033cb0

Browse files
authored
fix: list_users should accept FgaObject type (#99)
2 parents 326fd27 + dec3ef3 commit b033cb0

5 files changed

Lines changed: 37 additions & 17 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -914,6 +914,7 @@ List the users who have a certain relation to a particular type.
914914

915915
```python
916916
from openfga_sdk import OpenFgaClient
917+
from openfga_sdk.models.fga_object import FgaObject
917918
from openfga_sdk.client.models import ClientListUsersRequest, ClientTuple
918919

919920
configuration = ClientConfiguration(
@@ -927,7 +928,7 @@ async with OpenFgaClient(configuration) as api_client:
927928
}
928929

929930
request = ClientListUsersRequest(
930-
object="document:2021-budget",
931+
object=FgaObject(type="document", id="2021-budget"),
931932
relation="can_read",
932933
user_filters=[
933934
UserTypeFilter(type="user"),

example/example1/example1.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
ClientWriteRequest,
2929
WriteTransactionOpts,
3030
)
31+
from openfga_sdk.client.models.list_users_request import ClientListUsersRequest
3132
from openfga_sdk.credentials import CredentialConfiguration, Credentials
33+
from openfga_sdk.models.fga_object import FgaObject
3234

3335

3436
async def main():
@@ -264,7 +266,7 @@ async def main():
264266
print(f"Allowed: {response.allowed}")
265267

266268
# List objects with context
267-
print("Listing objects for access with context")
269+
print("Listing objects for access with context")
268270

269271
response = await fga_client.list_objects(
270272
ClientListObjectsRequest(
@@ -301,6 +303,20 @@ async def main():
301303
)
302304
print(f"Relations: {response}")
303305

306+
# ListUsers
307+
print("Listing user who have access to object")
308+
309+
response = await fga_client.list_objects(
310+
ClientListUsersRequest(
311+
relation="viewer",
312+
object=FgaObject(type="document", id="roadmap"),
313+
user_filters=[
314+
FgaObject(type="user"),
315+
],
316+
)
317+
)
318+
print(f"Users: {response.objects}")
319+
304320
# WriteAssertions
305321
await fga_client.write_assertions(
306322
[

openfga_sdk/client/models/list_users_request.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"""
1212

1313
from openfga_sdk.client.models.tuple import ClientTuple
14+
from openfga_sdk.models.fga_object import FgaObject
1415
from openfga_sdk.models.user_type_filter import UserTypeFilter
1516

1617

@@ -21,7 +22,7 @@ class ClientListUsersRequest:
2122

2223
def __init__(
2324
self,
24-
object: str = None,
25+
object: FgaObject = None,
2526
relation: str = None,
2627
user_filters: list[UserTypeFilter] = None,
2728
contextual_tuples: list[ClientTuple] = None,
@@ -34,7 +35,7 @@ def __init__(
3435
self._context = context
3536

3637
@property
37-
def object(self):
38+
def object(self) -> FgaObject:
3839
"""Gets the object of this ClientListUsersRequest.
3940
4041
@@ -44,7 +45,7 @@ def object(self):
4445
return self._object
4546

4647
@object.setter
47-
def object(self, object):
48+
def object(self, object: FgaObject):
4849
"""Sets the object of this ClientListUsersRequest.
4950
5051
@@ -55,7 +56,7 @@ def object(self, object):
5556
self._object = object
5657

5758
@property
58-
def relation(self):
59+
def relation(self) -> str:
5960
"""Gets the relation of this ClientListUsersRequest.
6061
6162
@@ -65,7 +66,7 @@ def relation(self):
6566
return self._relation
6667

6768
@relation.setter
68-
def relation(self, relation):
69+
def relation(self, relation: str):
6970
"""Sets the relation of this ClientListUsersRequest.
7071
7172
@@ -76,7 +77,7 @@ def relation(self, relation):
7677
self._relation = relation
7778

7879
@property
79-
def user_filters(self):
80+
def user_filters(self) -> list[UserTypeFilter]:
8081
"""Gets the user_filters of this ClientListUsersRequest.
8182
8283
@@ -86,7 +87,7 @@ def user_filters(self):
8687
return self._user_filters
8788

8889
@user_filters.setter
89-
def user_filters(self, user_filters):
90+
def user_filters(self, user_filters: list[UserTypeFilter]):
9091
"""Sets the user_filters of this ClientListUsersRequest.
9192
9293
@@ -97,7 +98,7 @@ def user_filters(self, user_filters):
9798
self._user_filters = user_filters
9899

99100
@property
100-
def contextual_tuples(self):
101+
def contextual_tuples(self) -> list[ClientTuple]:
101102
"""Gets the contextual_tuples of this ClientListUsersRequest.
102103
103104
@@ -107,7 +108,7 @@ def contextual_tuples(self):
107108
return self._contextual_tuples
108109

109110
@contextual_tuples.setter
110-
def contextual_tuples(self, contextual_tuples):
111+
def contextual_tuples(self, contextual_tuples: list[ClientTuple]):
111112
"""Sets the contextual_tuples of this ClientListUsersRequest.
112113
113114
@@ -118,7 +119,7 @@ def contextual_tuples(self, contextual_tuples):
118119
self._contextual_tuples = contextual_tuples
119120

120121
@property
121-
def context(self):
122+
def context(self) -> object:
122123
"""Gets the context of this ClientListUsersRequest.
123124
124125
Additional request context that will be used to evaluate any ABAC conditions encountered in the query evaluation.
@@ -129,7 +130,7 @@ def context(self):
129130
return self._context
130131

131132
@context.setter
132-
def context(self, context):
133+
def context(self, context: object):
133134
"""Sets the context of this ClientListUsersRequest.
134135
135136
Additional request context that will be used to evaluate any ABAC conditions encountered in the query evaluation.

test/test_client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from openfga_sdk.models.create_store_request import CreateStoreRequest
4242
from openfga_sdk.models.create_store_response import CreateStoreResponse
4343
from openfga_sdk.models.expand_response import ExpandResponse
44+
from openfga_sdk.models.fga_object import FgaObject
4445
from openfga_sdk.models.get_store_response import GetStoreResponse
4546
from openfga_sdk.models.leaf import Leaf
4647
from openfga_sdk.models.list_objects_response import ListObjectsResponse
@@ -2430,7 +2431,7 @@ async def test_list_users(self, mock_request):
24302431

24312432
async with OpenFgaClient(configuration) as api_client:
24322433
body = ClientListUsersRequest(
2433-
object="document:2021-budget",
2434+
object=FgaObject(type="document", id="2021-budget"),
24342435
relation="can_read",
24352436
user_filters=[
24362437
UserTypeFilter(type="user"),
@@ -2487,7 +2488,7 @@ async def test_list_users(self, mock_request):
24872488
post_params=[],
24882489
body={
24892490
"authorization_model_id": "01G5JAVJ41T49E9TT3SKVS7X1J",
2490-
"object": "document:2021-budget",
2491+
"object": {"id": "2021-budget", "type": "document"},
24912492
"relation": "can_read",
24922493
"user_filters": [
24932494
{"type": "user"},

test/test_client_sync.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from openfga_sdk.models.create_store_request import CreateStoreRequest
4040
from openfga_sdk.models.create_store_response import CreateStoreResponse
4141
from openfga_sdk.models.expand_response import ExpandResponse
42+
from openfga_sdk.models.fga_object import FgaObject
4243
from openfga_sdk.models.get_store_response import GetStoreResponse
4344
from openfga_sdk.models.leaf import Leaf
4445
from openfga_sdk.models.list_objects_response import ListObjectsResponse
@@ -2431,7 +2432,7 @@ def test_list_users(self, mock_request):
24312432

24322433
with OpenFgaClient(configuration) as api_client:
24332434
body = ClientListUsersRequest()
2434-
body.object = "document:2021-budget"
2435+
body.object = FgaObject(type="document", id="2021-budget")
24352436
body.relation = "can_read"
24362437
body.user_filters = [
24372438
UserTypeFilter(type="user"),
@@ -2487,7 +2488,7 @@ def test_list_users(self, mock_request):
24872488
post_params=[],
24882489
body={
24892490
"authorization_model_id": "01G5JAVJ41T49E9TT3SKVS7X1J",
2490-
"object": "document:2021-budget",
2491+
"object": {"id": "2021-budget", "type": "document"},
24912492
"relation": "can_read",
24922493
"user_filters": [
24932494
{"type": "user"},

0 commit comments

Comments
 (0)