[acls] treat decorator as acl in route decorator

This commit is contained in:
Maxime Alves LIRMM 2020-09-30 10:42:58 +02:00
parent 31878d971e
commit 74e0b3dc54
2 changed files with 12 additions and 2 deletions

View File

@ -14,9 +14,12 @@ def connected(fct=public):
""" """
@wraps(fct) @wraps(fct)
def caller(req, *args, **kwargs): def caller(req, *args, **kwargs):
print(fct)
print(req.user)
if (not hasattr(req, 'user') if (not hasattr(req, 'user')
or type(req.user) == UnauthenticatedUser or isinstance(req.user, UnauthenticatedUser)
or not hasattr(req.user, 'is_authenticated')): or not hasattr(req.user, 'is_authenticated')):
print('Connected is false')
return False return False
return fct(req, **{**kwargs, **req.path_params}) return fct(req, **{**kwargs, **req.path_params})

View File

@ -37,12 +37,19 @@ def route_acl_decorator(fct: Callable, params: List[Dict]):
@wraps(fct) @wraps(fct)
async def caller(req: Request, *args, **kwargs): async def caller(req: Request, *args, **kwargs):
for param in params: for param in params:
if param.get('acl') and param['acl'](req, *args, **kwargs): if param.get('acl'):
""" """
We merge the 'acl' and 'keys' kwargs values to let the We merge the 'acl' and 'keys' kwargs values to let the
decorated function know which ACL function answered decorated function know which ACL function answered
True, and other parameters that you'd need True, and other parameters that you'd need
""" """
passed = param['acl'](req, *args, **kwargs)
if isinstance(passed, FunctionType):
passed = param['acl']()(req, *args, **kwargs)
if not passed:
continue
return await fct( return await fct(
req, *args, req, *args,
**{ **{