Member 13665596 Ответов: 0

Как использовать аргумент, возвращаемый декоратором в другом декораторе, который вызывается после первого декоратора


Я использую два декоратора для украшения функции "add_user", первый из которых @auth_user аутентифицирует вошедшего пользователя через заголовки запроса веб-токена json и возвращает информацию пользователя в качестве аргумента "user_info" обратно в оформленную функцию add_user. Второй декоратор @has_permission должен проверить, есть ли у пользователя разрешения на запрашиваемый ресурс. Я хотел передать информацию пользователя, возвращенную как user_info @auth_user в @has_permission, но не знаю, как это сделать, вот код до сих пор:

Что я уже пробовал:

@has_permission
@auth_user
def add_user(user_info):
    """
    do something
    """
    return None


Оформитель:

def auth_user(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        data = jwt.decode(request.headers['some-access-token'], some_secret_key)
        try:
            user_info = User.query.filter(User.id==data['user_id']).first()
        except:
            return jsonify({"message" : "error"}), 401

        return f(user_info, *args, **kwargs)

    return wrapper


и:

def has_permission(f):
    wraps(f)
    def wrapper(*args, **kwargs):
        # This is where I want to access the user information instead of processing the key again #
        # return some new_args ... #
        return f(*args, **kwargs)
    return wrapper


Каков наилучший способ достичь этого?

Спасибо.

0 Ответов