Конечно, это не новый вопрос, но вот он:
В моей системе заказов на основе Django каждый пользователь (который не является сотрудником) связан с объектом CustomerProfile, который сопоставляет этого пользователя с правильным объектом Customer. Этот клиент пользователи могут войти и просмотреть неоплаченные счета. Для просмотра счетов клиента вы переходите к чему-то вроде этого:
/ счета / клиент / 97 /
(Счет клиента № 97)
Это нормально, но мне нужно включить некоторую аутентификацию, чтобы пользователь, являющийся частью профиля клиента, не мог просмотреть счета другого клиента, например, вручную введя / invoices / customer / 92 / (счет 92 принадлежит другому клиенту) .
У меня есть это, но это действительно не хороший код (и не работает):
def customer_invoice_detail(request, object_id):
user = threadlocals.get_current_user()
try:
userprofile = UserProfile.objects.get(user=user)
user_customer = userprofile.customer.id
except UserProfile.DoesNotExist:
user_customer = None
if (request.user.is_authenticated() and user_customer is not null) or request.user.is_staff():
invoice = CustomerInvoice.objects.get(pk=object_id)
product_list = CustomerInvoiceOrder.objects.filter(invoice=object_id)
context = {
'object': invoice,
'product_list': product_list,
}
return render_to_response("invoices/customer_invoice_detail.html", context, context_instance=RequestContext(request))
else:
return HttpResponse("You are not authorised to view this invoice")
Должен ли быть лучший / более простой способ справиться с этим - есть идеи?
Приветствия