[acls] Allows decorators to be used as acls (fct=acl.public).
This commit is contained in:
parent
79210e503e
commit
b89e03746f
@ -5,20 +5,21 @@ from starlette.authentication import UnauthenticatedUser
|
|||||||
""" Base ACL module that contains generic functions for domains ACL
|
""" Base ACL module that contains generic functions for domains ACL
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def connected(func):
|
def public(*args, **kwargs) -> bool:
|
||||||
|
"Unlimited access"
|
||||||
|
return True
|
||||||
|
|
||||||
|
def connected(fct=public):
|
||||||
""" Decorator that checks if the user object of the request has been set
|
""" Decorator that checks if the user object of the request has been set
|
||||||
"""
|
"""
|
||||||
@wraps(func)
|
@wraps(fct)
|
||||||
def caller(req, *args, **kwargs):
|
def caller(req, *args, **kwargs):
|
||||||
if (not hasattr(req, 'user')
|
if (not hasattr(req, 'user')
|
||||||
or type(req.user) == UnauthenticatedUser
|
or type(req.user) == UnauthenticatedUser
|
||||||
or not hasattr(req.user, 'is_authenticated')):
|
or not hasattr(req.user, 'is_authenticated')):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return func(req, **{**kwargs, **req.path_params})
|
return fct(req, **{**kwargs, **req.path_params})
|
||||||
|
|
||||||
return caller
|
return caller
|
||||||
|
|
||||||
def public(*args, **kwargs) -> bool:
|
|
||||||
"Unlimited access"
|
|
||||||
return True
|
|
||||||
|
@ -3,7 +3,7 @@ from functools import wraps
|
|||||||
import importlib
|
import importlib
|
||||||
import sys
|
import sys
|
||||||
from typing import Callable, List, Tuple, Dict, Generator
|
from typing import Callable, List, Tuple, Dict, Generator
|
||||||
from types import ModuleType
|
from types import ModuleType, FunctionType
|
||||||
|
|
||||||
from halfapi.conf import (PROJECT_NAME, DB_NAME, HOST, PORT,
|
from halfapi.conf import (PROJECT_NAME, DB_NAME, HOST, PORT,
|
||||||
PRODUCTION, DOMAINS)
|
PRODUCTION, DOMAINS)
|
||||||
@ -137,7 +137,9 @@ def api_acls(request):
|
|||||||
for domain in app.d_acl.keys():
|
for domain in app.d_acl.keys():
|
||||||
res[domain] = {}
|
res[domain] = {}
|
||||||
for acl_name, fct in app.d_acl[domain].items():
|
for acl_name, fct in app.d_acl[domain].items():
|
||||||
print( fct(request) )
|
ok = fct(request)
|
||||||
res[domain][acl_name] = fct(request)
|
if isinstance(ok, FunctionType):
|
||||||
|
ok = fct()(request)
|
||||||
|
res[domain][acl_name] = ok
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
Loading…
Reference in New Issue
Block a user