3636 Action , ResourceDeclareRequest ,
3737)
3838
39- from nitric .resources .base import BaseResource
39+ from nitric .resources .base import BaseResource , SecureResource
4040
4141
4242class CollectionPermission (Enum ):
@@ -47,56 +47,47 @@ class CollectionPermission(Enum):
4747 deleting = "deleting"
4848
4949
50- def _perms_to_actions (permissions : List [Union [CollectionPermission , str ]]) -> List [Action ]:
51- permission_actions_map = {
52- CollectionPermission .reading : [Action .CollectionDocumentRead , Action .CollectionQuery , Action .CollectionList ],
53- CollectionPermission .writing : [Action .CollectionDocumentWrite , Action .CollectionList ],
54- CollectionPermission .deleting : [Action .CollectionDocumentDelete , Action .CollectionList ],
55- }
56- # convert strings to the enum value where needed
57- perms = [
58- permission if isinstance (permission , CollectionPermission ) else CollectionPermission [permission .lower ()]
59- for permission in permissions
60- ]
6150
62- return [action for perm in perms for action in permission_actions_map [perm ]]
6351
6452
65- def _to_resource (collection : Collection ) -> Resource :
66- return Resource (name = collection .name , type = ResourceType .Collection )
6753
6854
69- class Collection (BaseResource ):
55+ class Collection (SecureResource ):
7056 """A document collection resource."""
7157
7258 def __init__ (self , name : str ):
7359 """Construct a new document collection."""
7460 super ().__init__ ()
7561 self .name = name
76- self ._channel = new_default_channel ()
77- self ._resources_stub = ResourceServiceStub (channel = self ._channel )
7862
7963 async def _register (self ):
8064 try :
81- await self ._resources_stub .declare (resource_declare_request = ResourceDeclareRequest (resource = _to_resource (self )))
65+ await self ._resources_stub .declare (resource_declare_request = ResourceDeclareRequest (resource = self . _to_resource ()))
8266 except GRPCError as grpc_err :
8367 raise exception_from_grpc_error (grpc_err )
8468
85- async def allow (self , permissions : List [Union [CollectionPermission , str ]]) -> CollectionRef :
69+ def _to_resource (self ) -> Resource :
70+ return Resource (name = self .name , type = ResourceType .Collection )
71+
72+ def _perms_to_actions (self , permissions : List [Union [CollectionPermission , str ]]) -> List [Action ]:
73+ permission_actions_map = {
74+ CollectionPermission .reading : [Action .CollectionDocumentRead , Action .CollectionQuery ,
75+ Action .CollectionList ],
76+ CollectionPermission .writing : [Action .CollectionDocumentWrite , Action .CollectionList ],
77+ CollectionPermission .deleting : [Action .CollectionDocumentDelete , Action .CollectionList ],
78+ }
79+ # convert strings to the enum value where needed
80+ perms = [
81+ permission if isinstance (permission , CollectionPermission ) else CollectionPermission [permission .lower ()]
82+ for permission in permissions
83+ ]
84+
85+ return [action for perm in perms for action in permission_actions_map [perm ]]
86+
87+ def allow (self , permissions : List [Union [CollectionPermission , str ]]) -> CollectionRef :
8688 """Request the required permissions for this collection."""
8789 # Ensure registration of the resource is complete before requesting permissions.
88- if self ._reg is not None :
89- await self ._reg
90-
91- policy = PolicyResource (
92- principals = [Resource (type = ResourceType .Function )],
93- actions = _perms_to_actions (permissions ),
94- resources = [_to_resource (self )],
95- )
96- try :
97- await self ._resources_stub .declare (resource_declare_request = ResourceDeclareRequest (resource = Resource (type = ResourceType .Policy ), policy = policy ))
98- except GRPCError as grpc_err :
99- raise exception_from_grpc_error (grpc_err )
90+ self ._register_policy (permissions )
10091
10192 return Documents ().collection (self .name )
10293
0 commit comments