使用 Flask-JWT-Extended 实现角色

Implementing roles with Flask-JWT-Extended

我目前正在开发一个烧瓶 api,它使用 flask-jwt-extended 来保护端点。我有 jwt 所需的装饰器正常工作,但我想添加角色以更精细地控制访问。在我的想象中,最好有三个表 Users,Roles 和 UserRoles。 UserRoles 会使用外部 ID 将用户映射到角色,然后使用自定义装饰器检查每个端点。

我以前从来没有这样做过,你会如何实施,为什么?

正如您所建议的,拥有一些基本的表和方法 + 装饰器是可行的方法。

您还可以查看 Flask-Security 中的实现方式 (或在 Flask-Security 中使用的 Flask-Login 和 Flask-Principal 包中)。它可以给你一些建议,让你知道你想要什么样的功能。

根据 docs,自定义装饰器应该是可行的,如下所示:

from flask_jwt_extended import get_jwt
from flask_jwt_extended import verify_jwt_in_request


# Here is a custom decorator that verifies the JWT is present in the request,
# as well as insuring that the JWT has a claim indicating that this user is
# an administrator
def admin_required():
    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            verify_jwt_in_request()
            claims = get_jwt()
            if claims["is_administrator"]:
                return fn(*args, **kwargs)
            else:
                return jsonify(msg="Admins only!"), 403

        return decorator

    return wrapper

只需确保保存角色信息 using additional claims