Flask - 创建仅包含用户授权路径的索引页面

时间:2018-05-07 08:30:33

标签: python flask jinja2 python-decorators

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

我的问题是我有一个索引页面,其中列出了所有路由,我只希望显示此特定用户允许的路由。

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

这有可能吗?

1 个答案:

答案 0 :(得分: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(或者在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 %}