python-3.x 使用Flask-JWT-Extended实现角色

xzlaal3s  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(140)

我目前正在开发一个flask API,它使用flask-jwt-extended来保护端点。我的jwt required decorator工作正常,但我想添加角色来对访问进行更细粒度的控制。在我的想象中,最好有三个表Users,Roles和UserRoles。UserRoles将使用foreign id将用户Map到角色,然后使用自定义decorator来检查每个端点。
我从来没有这样做过,你会如何实现这一点,为什么?

qaxu7uf2

qaxu7uf21#

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

polhcujo

polhcujo2#

正如你所建议的,有一些基本的表和方法+装饰器是正确的方法。
你也可以看看这是如何在Flask-Security中实现的(或者在Flask-Security中使用的Flask-Login和Flask-Principal包中)。它可以给你给予一些关于你想要什么样的函数的建议。

相关问题