【问题标题】:Flask - Create index page with only the authorized route for userFlask - 创建仅包含用户授权路线的索引页面
【发布时间】:2018-10-17 00:19:51
【问题描述】:

我正在编写一个具有两个角色(用户和管理员)的仪表板。我有一个名为 requires_admin 的装饰器,它可以防止简单用户访问该页面。

我的问题是我有一个列出所有路线的索引页面,我只想显示该特定用户允许的路线。

这意味着我想知道哪些路由有 requires_admin 装饰器,哪些没有。

这有可能吗?

【问题讨论】:

  • 你是自定义创建的required_admin装饰器吗?或者您是否使用任何第三方插件?
  • @RajaSimon 自定义创建
  • 哦,你为什么不考虑flask-principle它可以选择在模板中检查current_user.has_role('Admin')

标签: python flask jinja2 python-decorators


【解决方案1】:

如果您希望使用自定义角色,那么当有人登录时,您可以像这样保存他们的详细信息,包括他们在烧瓶会话中的角色

from flask import session as login_session
login_session['user_role'] = user.role #assuming you have queried your user object whose attributes include role

那么在渲染模板的时候,就可以传递用户角色了

user_role  = login_session['user_role']
return render_template('index.html', user_role= user_role)

然后在您的模板中(我只是使用一个链接,但您可以包含整个 div)

{% if user_role == 'admin'%}
<a href ="/secretdash">Dashboard</a>
{%endif%}

但我强烈建议您使用 flask-security(或如 cmets flask-principle 中所建议的那样,它是 flask-security 中的模块之一)。使用 flask-security/flask 原则,您可以执行以下操作

1) 仅登录用户的链接

{% if current_user.is_authenticated %}
 <li> <a href="/firstdashboard"> Dashboard </a> </li>
{% endif %}

2) 仅具有特定角色的用户的链接

{% if current_user.has_role('admin') %}
<li><a href="/secretdash">Secret Dash</a></li>
{% endif %}

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 2016-02-18
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多