保护Flask端点的最佳方法是什么?
我正在搭建一个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这个工具。