Python中如何创建带参数的装饰器

219 阅读1分钟

1 起因

在检验接口权限的设计中, 我们需要确认接口的代码, 并使用一个通用的装饰器, 此时我们就需要一个支持参数的装饰器函数

2 解决方案

直接上代码

def authorization(code: str = None):    
    def decorator(fn):        
        @wraps(fn)        
        def wrapper(*args, **kwargs):
            try:                
                verify_jwt_in_request()            
            except Exception:                
                raise BusinessException("无访问权限", 403)            
            if code is None:                
                return fn(*args, **kwargs)            
            authorities = get_jwt()['authorities']           
            if code not in authorities:                
                raise BusinessException("无访问权限", 403)            
            return fn(*args, **kwargs)       
        return wrapper    
    return decorator

其中code为接口权限代码