Skip to main content
 首页 » 编程设计

python之Flask-HTTPAuth 用户访问级别

2025年05月04日22powertoolsteam

我目前正在使用 Flask-RESTful 构建 REST API,并使用 Flask-HTTPAuth 来保护一些 put 和 get 方法。我想根据我存储在数据库中的预定义用户权限来允许访问这些方法。

我的问题是,如何修改或拦截下面函数的结果,以便我可以根据端点/方法改变访问权限?基本身份验证清除后,我希望能够检查用户是否在我的数据库中具有相关权限。使用 Flask-Session 这很容易,但这里的 API 是无状态的。

@auth.verify_password 
def verify_password(user, password): 
    query_set = models.User.objects(username=user) 
    if query_set: 
        return helpers.verify(password, query_set[0].password) 
    else: 
        return False 

非常感谢。

请您参考如下方法:

要使用基于角色的身份验证,您需要在通过密码步骤后添加第二次检查。

您有两个选择。更直接的方法是在每个端点函数中添加角色检查。如果你想要更复杂的东西来避免代码重复,那么你可以定义一个自定义装饰器,比如我在这里使用的装饰器:https://github.com/miguelgrinberg/flasky/blob/master/app/decorators.py .

您需要调整它以使用您自己的用户对象而不是 current_user,但除此之外这是一个很好的示例:

def permission_required(permission): 
    def decorator(f): 
        @wraps(f) 
        def decorated_function(*args, **kwargs): 
            if not current_user.can(permission): 
                abort(403) 
            return f(*args, **kwargs) 
        return decorated_function 
    return decorator 

那么在你的 route ,你这样做:

@app.route('/api/something') 
@auth.login_required 
@permission_required('admin') 
def something(): 
    pass