我们正在工作中使用 Flask + Jinja2 编写一个 Web 应用程序。
该应用程序具有注册用户,可以根据其角色访问某些页面。为了在服务器端实现这一点,我们只需使用装饰页面:
@app.route('/action1')
@security_requirements(roles=['some_role'])
def action1():
...
装饰器检查登录用户的角色列表中是否有“some_role”,并决定是将调用传递给装饰函数还是仅将用户重定向到“拒绝访问”页面。
该应用程序还有一个使用引导程序实现的导航栏。导航栏使用基本模板显示在每个页面中。就目前而言,应用程序中的每个页面在导航栏中都有一个条目,无论当前用户是否可以访问它。尽管这不是一个安全漏洞,但我想隐藏用户无法访问的页面。此外,我希望在不复制 Jinja 模板内允许的角色列表的情况下实现此功能。使用我当前的装饰器是否可以在 Jinja 中以某种方式实现此功能?
I use Flask-安全 http://pythonhosted.org/Flask-Security/,它将许多登录/安全模块捆绑在一个漂亮的包中。它配备了 Flask-Principal 提供的角色管理功能,允许您执行以下操作:
{% if current_user.has_role('admin') %}
<li><a href="#">Manage Site</a></li>
{% endif %}
You can 看看它是如何在源代码中实现的 https://github.com/mattupstate/flask-security/blob/7808870fcdda68302adfcc1497a4f58b98073065/flask_security/core.py#L267, the current_user
代理来自Flask-登录 https://flask-login.readthedocs.org/en/latest/#flask.ext.login.current_user
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)