fix: 调整手机号强制认证判定规则(身份触发)

This commit is contained in:
XingQue
2026-06-22 15:26:05 +08:00
parent 1ef7c62ab4
commit a07bd3d388

View File

@@ -3227,83 +3227,62 @@ class CheckPhoneAuthView(APIView):
判断当前登录用户是否需要强制手机号认证 判断当前登录用户是否需要强制手机号认证
规则: 规则:
- 已认证过手机号(shoujihao_renzheng=True → 不需要 - 已认证过手机号(PhoneVerified=True → 不需要
- 未认证时,检查用户角色及其业务指标是否达到阈值 - 未认证时,满足以下任一条件 → 需要认证
打手:有会员购买记录Huiyuangoumai 中存在记录) 打手:有会员购买记录,或押金 > 0
商家:发布订单总数fabu>= 5 商家:已是商家(存在商家扩展表)
管事:充值分佣总额chongzhifenrun>= 15 管事:已是管事(存在管事扩展表)
组长:分佣总额fenyong_zonge>= 2 组长:已是组长(存在组长扩展表)
老板:消费总额zonge>= 20 老板:有下单记录alldingdan > 0
- 满足任一角色的阈值 → 需要认证
- 否则 → 不需要认证
""" """
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def post(self, request): def post(self, request):
user = request.user # User 实例 user = request.user
# 已经认证过手机号,直接放行 if getattr(user, 'PhoneVerified', False):
if user.PhoneVerified: return Response({'code': 0, 'need_auth': False})
return Response({'need_auth': False})
# 检查各角色是否满足阈值条件
if self._dashou_meets_threshold(user): if self._dashou_meets_threshold(user):
return Response({'need_auth': True}) return Response({'code': 0, 'need_auth': True})
if self._shangjia_meets_threshold(user): if self._shangjia_meets_threshold(user):
return Response({'need_auth': True}) return Response({'code': 0, 'need_auth': True})
if self._guanshi_meets_threshold(user): if self._guanshi_meets_threshold(user):
return Response({'need_auth': True}) return Response({'code': 0, 'need_auth': True})
if self._zuzhang_meets_threshold(user): if self._zuzhang_meets_threshold(user):
return Response({'need_auth': True}) return Response({'code': 0, 'need_auth': True})
if self._boss_meets_threshold(user): if self._boss_meets_threshold(user):
return Response({'need_auth': True}) return Response({'code': 0, 'need_auth': True})
# 都不满足,无需认证 return Response({'code': 0, 'need_auth': False})
return Response({'need_auth': False})
# ==================== 各角色阈值判断方法 ====================
def _dashou_meets_threshold(self, user): def _dashou_meets_threshold(self, user):
""" """打手:有会员记录,或押金 > 0"""
打手条件存在会员购买记录Huiyuangoumai 表中有该用户的记录)
"""
try: try:
# 先确认用户是打手 dashou = UserDashou.query.get(user=user)
UserDashou.query.get(user=user)
except UserDashou.DoesNotExist: except UserDashou.DoesNotExist:
return False return False
# 检查是否有任意会员购买记录 if dashou.yajin and dashou.yajin > 0:
return True
return Huiyuangoumai.query.filter(yonghu_id=user.UserUID).exists() return Huiyuangoumai.query.filter(yonghu_id=user.UserUID).exists()
def _shangjia_meets_threshold(self, user): def _shangjia_meets_threshold(self, user):
"""商家条件:发布订单总数 fabu >= 5""" """商家:已是商家身份"""
try: return UserShangjia.query.filter(user=user).exists()
shop = UserShangjia.query.get(user=user)
except UserShangjia.DoesNotExist:
return False
return shop.fabu >= 5
def _guanshi_meets_threshold(self, user): def _guanshi_meets_threshold(self, user):
"""管事条件:充值分佣总额 chongzhifenrun >= 15""" """管事:已是管事身份"""
try: return UserGuanshi.query.filter(user=user).exists()
guanshi = UserGuanshi.query.get(user=user)
except UserGuanshi.DoesNotExist:
return False
return guanshi.chongzhifenrun >= 15
def _zuzhang_meets_threshold(self, user): def _zuzhang_meets_threshold(self, user):
"""组长条件:分佣总额 fenyong_zonge >= 2""" """组长:已是组长身份"""
try: return UserZuzhang.query.filter(user=user).exists()
zuzhang = UserZuzhang.query.get(user=user)
except UserZuzhang.DoesNotExist:
return False
return zuzhang.fenyong_zonge >= 2
def _boss_meets_threshold(self, user): def _boss_meets_threshold(self, user):
"""老板条件:消费总额 zonge >= 20""" """老板:有下单记录"""
try: try:
boss = UserBoss.query.get(user=user) boss = UserBoss.query.get(user=user)
except UserBoss.DoesNotExist: except UserBoss.DoesNotExist:
return False return False
return boss.zonge >= 20 return (boss.alldingdan or 0) > 0