保护Flask端点的最佳方法是什么?

2 投票
1 回答
6198 浏览
提问于 2025-04-18 16:46

我正在搭建一个Flask应用,其中有一个叫做createUser的接口。现在我希望只有管理员(用户类型为admin)可以创建其他用户,而普通用户则不能。使用@login-required装饰器并不能阻止普通用户访问这个接口。

一种简单的限制方法是在createUser函数中检查用户的类型,只有当用户是管理员时才允许执行。

但一般来说,保护Flask接口的最佳方法是什么,以便只有少数用户能够访问这些接口呢?

1 个回答

7

一般来说,人们通常会设置一个装饰器,用来获取current_user(当前用户)并检查他们的角色。

def role_required(role_name):
    def decorator(func):
        @wraps(func)
        def authorize(*args, **kwargs):
            if not current_user.has_role(role_name):
                abort(401) # not authorized
            return func(*args, **kwargs)
        return authorize
    return decorator

然后在你的视图中,你基本上可以这样做:

@app.route('/protected')
@role_required('admin')
def admin_view():
    " this view is for admins only "

另外,你也可以使用flask-bouncer这个工具。

撰写回答