我有一个基本权限系统,我在其中几乎基于 对权限进行硬编码user.profile.user_type
,user.profile
相当于user.get_profile()
.
例如,如果 auser_type
是1
(物业经理),那么该用户可以查看所有工作订单。A user_type
of 2
(tenant) 表示用户只能查看他创建的工单。
我目前只是urls.py
像这样使用基于类的通用视图
url(
r'^orders/$',
ListView.as_view(
model = Order,
template_name = 'doors/orders/list.html'
),
name = 'orders_list'
),
因此我根本没有权限控制。
那么要添加权限系统,我应该像这样在模板中控制它吗?
{% for order in order_list %}
{% if request.user.profile.user_type == 1 %}
# Show every order
{{ order.pk }}
{% else %}
# Show only work orders created by that user
{% if order.creator == request.user.pk %}
{{ order.pk }}
{% endif %}
{% endif %}
{% endfor %}
我有一种感觉,尝试在模板内部进行过滤是在浪费大量的 SQL 命中,因为无论是什么user_type
,模板仍然会强制 Django 调用每个工单。真的吗?
或者我应该像这样在视图中控制它?
def orders_list( request ) :
if request.user.user_type == 1 :
order_list = Order.objects.all()
else :
order_list = Order.objects.filter( creator = request.user.pk )
dictionary = {
'order_list' : order_list,
}
return render( request, 'doors/orders/list.html', dictionary )
显然,如果我试图在里面控制它views.py
,那么我就不能再使用通用视图了。
最后,我的第三个选择是(以某种方式)在基于类的通用视图中控制它。我什至不知道这是否可能。也许不知何故get_context_data
?我真的很喜欢通用视图的简单性,但我对更高级的 OO 概念不太熟悉。
各位有什么建议?