This commit is contained in:
2026-06-18 22:17:46 +08:00
parent d93d3b3c6d
commit f169b6569a
2 changed files with 122 additions and 8 deletions

View File

@@ -5,7 +5,7 @@ from functools import lru_cache
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from rest_framework.response import Response
from .models import AbnormalUserLog, UserRole, Permission, PlayerDailyStats, MerchantDailyStats, \
from .models import AbnormalUserLog, UserRole, RolePermission, Permission, PlayerDailyStats, MerchantDailyStats, \
ManagerRenewalDailyStats, ManagerDailyStats, LeaderDailyStats, WithdrawalDailyStats
from django.db import transaction
@@ -96,13 +96,45 @@ def verify_kefu_permission(request, username_from_frontend=None):
'msg': '身份错误,无权操作其他账号,相关操作已记录'
}, status=403)
# ---------- 4. 获取用户的所有权限(通过角色) ----------
# 步骤1获取用户的所有角色ID
role_ids = UserRole.query.filter(account_id=current_user.phone).values_list('role_id', flat=True)
# 步骤2通过角色ID获取权限编码
permissions = list(Permission.query.filter(
rolepermission__role_id__in=role_ids
).values_list('perm_code', flat=True).distinct())
# ---------- 4. 获取用户的所有权限 ----------
# 优先从 RBAC 表获取,若 RBAC 表不存在/无数据则回退到旧 account_permission 表
try:
user_roles = UserRole.query.filter(account_id=current_user.phone).select_related('role')
role_ids = [ur.role_id for ur in user_roles]
if role_ids:
perm_ids = RolePermission.query.filter(role_id__in=role_ids).values_list('permission_id', flat=True)
permissions = list(Permission.query.filter(
perm_id__in=perm_ids
).values_list('perm_code', flat=True).distinct())
else:
permissions = []
except Exception:
permissions = []
# RBAC 无数据时,回退到旧 account_permission 表
if not permissions:
try:
from config.models import AccountPermission
old_perms = AccountPermission.query.filter(
account_id=current_user.phone,
is_enabled=True
).values_list('permission_code', flat=True)
# 旧权限码映射到新权限编码
perm_code_map = {
1: '001', # 超级管理员
2: '002ab', # 平台订单管理
3: '002ac', # 处罚管理
4: '002ad', # 退款管理
5: '002ae', # 店铺管理
6: '002af', # 商品审核
7: '002ag', # 提现审核
8: '002ah', # 用户管理
9: '002ai', # 数据统计
10: '002aj', # 系统配置
}
permissions = [perm_code_map.get(code, str(code)) for code in old_perms if code in perm_code_map]
except Exception:
permissions = []
if not permissions:
logger.warning(f"用户 {current_user.phone} 没有任何权限,请检查角色分配")