Files
Django/merchant_ops/helpers.py

54 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""视图辅助:以商家身份代理调用现有订单 View不修改原接口"""
import logging
from backend.utils import pick_order_id
from merchant_ops.services.authz import StaffAuthError, member_has_perm
from merchant_ops.models import MerchantOrderDispatch
from orders.models import MerchantOrderExt
from users.business_models import User
logger = logging.getLogger(__name__)
def get_merchant_user(merchant_id):
return User.query.get(UserUID=merchant_id)
def staff_can_access_order(member, order_id, perm_all='order_view_all', perm_self='order_view_self'):
ext = MerchantOrderExt.query.filter(
MerchantID=member.merchant_id,
Order__OrderID=order_id,
).first()
if not ext:
return False, None
if member_has_perm(member, perm_all):
return True, ext
if member_has_perm(member, perm_self):
disp = MerchantOrderDispatch.query.filter(order_id=order_id).first()
if disp and disp.staff_member_id == member.id:
return True, ext
return False, ext
def proxy_merchant_order_view(request, member, view_class, perm_code):
"""子客服通过商家 User 代理调用现有 View.post。"""
if not member_has_perm(member, perm_code):
raise StaffAuthError(403, f'无权限: {perm_code}')
order_id = pick_order_id(request.data)
if order_id:
ok, _ = staff_can_access_order(member, order_id)
if not ok:
raise StaffAuthError(403, '无权操作该订单')
merchant_user = get_merchant_user(member.merchant_id)
old_user = request.user
request.user = merchant_user
request._staff_member = member
try:
return view_class().post(request)
finally:
request.user = old_user
if hasattr(request, '_staff_member'):
delattr(request, '_staff_member')