Permisos: marketing (export completo, agenda/citas, cumpleanos, visitas, WACRM), gerencia gestiona usuarios y roles, recepcion edita expedientes, cosmetologas ven agenda, fix del sidebar que no dejaba seleccionar Leads
This commit is contained in:
@@ -114,6 +114,27 @@ def current_user(env):
|
||||
return user
|
||||
|
||||
|
||||
def forbid_roles(*roles):
|
||||
"""Decorator: niega el acceso a una lista explícita de roles.
|
||||
|
||||
Se usa para cerrar operaciones de dinero a roles con rango de escritura
|
||||
que no deben tocarlas (p. ej. marketing, que comparte rango con recepción
|
||||
para poder agendar, pero no debe cobrar).
|
||||
"""
|
||||
|
||||
def decorator(func):
|
||||
@functools.wraps(func)
|
||||
def wrapper(self, *args, **kw):
|
||||
if request.httprequest.method == 'OPTIONS':
|
||||
return _json({}, 200)
|
||||
user = current_user(request.env)
|
||||
if user and user.role in roles:
|
||||
return _json({'status': 'error', 'message': 'Sin permiso'}, 403)
|
||||
return func(self, *args, **kw)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
def require_role(min_role='lectura'):
|
||||
"""Decorator: exige token válido y un rol con rango >= min_role.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user