我们正在工作中使用Flask + Jinja2编写Web应用程序。 该应用程序有注册用户,根据其角色可以访问特定页面。为了在服务器端实现这一点,我们只需为页面添加装饰器:
@app.route('/action1')
@security_requirements(roles=['some_role'])
def action1():
...
装饰器检查已登录用户的角色列表中是否有“some_role”,并决定是将调用传递给装饰函数还是只是重定向用户到“访问被拒绝”页面。
该应用程序还使用Bootstrap实现了导航栏。导航栏使用基础模板在每个页面中显示。目前为止,应用程序中的每个页面都在导航栏中有条目,无论当前用户是否可以访问它。尽管这不是安全漏洞,但我想隐藏用户无法访问的页面。此外,我希望在不在Jinja模板中重复允许角色列表的情况下实现此功能。是否可能通过使用我的当前装饰器在Jinja中以某种方式实现此功能?
security_requirements
是你的装饰器吗?它可以被更改吗? - twil