使用 Flask-JWT-Extended 实现角色

问题描述 投票:0回答:2

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

我以前从未这样做过,你会如何实现这个以及为什么?

python-3.x flask flask-sqlalchemy flask-jwt-extended
2个回答
3
投票

根据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

只需确保您保存角色信息使用附加声明


2
投票

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

您还可以在 Flask-Security 中了解这是如何实现的 (或者在 Flask-Login 和 Flask-Principal 包中,它们在 Flask-Security 中使用)。它可以为您提供一些关于您想要拥有什么样的功能的建议。

© www.soinside.com 2019 - 2024. All rights reserved.