我正在编写一个包含两个角色(用户和管理员)的仪表板。我有一个名为requires_admin
的装饰器,它阻止简单用户访问该页面。
我的问题是我有一个索引页面,其中列出了所有路由,我只希望显示此特定用户允许的路由。
这意味着我想知道哪些路线有requires_admin
装饰器,哪些没有。
这有可能吗?
答案 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 %}