Quiero crear un decorador personalizado que verifique al usuario actual y ejecute una consulta para que este usuario obtenga algunos datos que le pertenecen y luego, si tiene una función de datos definida, se llama con toda la lista pasada; de lo contrario, devuelve el error 403. ¿Cómo puedo abordar esto?
Puedes escribir decorador así:
# check_data is what the user must have access to def custom_decorator(check_data): def decorator(func): def wrapper(request, *args, **kwargs): user = request.request.user # data_list is list of his access data_list = [] if user.is_authenticated: pass # you can do your query here to check access if check_data in data_list: kwargs['access_list'] = data_list return func(request, *args, **kwargs) # return Http Error here return wrapper return decoratorAgregue el parámetro access_list a su función de vista:
@custom_decorator("something") def get(self, request, access_list=None):