我有一个具有多个用户角色的烧瓶应用程序。所有角色都需要访问“索引”页面,但每个角色的页面都不同。为了实现这一点,我认为最好的解决方案是为某些用户角色添加前缀。例如,管理员角色将转到http://admin.myapp.com/index,合作伙伴将转到http://partner.myapp.com/。
我已经看到了一些关于如何为所有视图添加路由前缀的信息,但我只希望它基于用户的角色。实现这一目标的最佳方法是什么?任何人都能帮我推动正确的方向吗?
谢谢!
答案 0 :(得分:0)
您不必担心域名前缀来解决此问题。
显然,您将拥有user
个user
相关字段的模型。添加role
作为user model
class User(db.Model):
..........
..........
role = db.Column(db.String(50)) #admin, customer, agent etc..
@app.route('/index' methods=('GET','POST'))
@login_required
def index_view():
#get the current logged in user object
user = current_user or g.user #based on your way of implementation
if user.role == 'admin':
return render_to_response('admin_index.html',{'data':'This is admin page'})
elif user.role == 'agent':
return render_to_response('agent_index.html',{'data':'This is agent page'})
else:
return render_to_response('default_index.html',{'data':'This is default page'})
在这里,您应该添加login_required
装饰器,以确保在访问此user
之前登录view method
如果您希望将此view method
限制为特定user roles
,则可以编写@roles_required
装饰器,其输入为allowed_roles
并基于此返回
roles_required
装饰器实施概述def roles_required(func):
def wrapper(*args, **kwargs):
for i in args:
user = current_user #get user object
if user.role == i:
return func()
return wrapper
在您实施roles_required
后,在为view
@login_required
时添加相应的def index_view()
方法
@roles_required('admin','agent')