修改了鉴权模型,使用 GVSDSDK 来修正
This commit is contained in:
@@ -5,8 +5,9 @@ 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, RolePermission, Permission, PlayerDailyStats, MerchantDailyStats, \
|
||||
from .models import AbnormalUserLog, PlayerDailyStats, MerchantDailyStats, \
|
||||
ManagerRenewalDailyStats, ManagerDailyStats, LeaderDailyStats, WithdrawalDailyStats
|
||||
from gvsdsdk.models import UserRole as SdkUserRole, RolePermission as SdkRolePermission, Permission as SdkPermission
|
||||
|
||||
from django.db import transaction
|
||||
from django.db.models import F
|
||||
@@ -97,44 +98,30 @@ def verify_kefu_permission(request, username_from_frontend=None):
|
||||
}, status=403)
|
||||
|
||||
# ---------- 4. 获取用户的所有权限 ----------
|
||||
# 优先从 RBAC 表获取,若 RBAC 表不存在/无数据则回退到旧 account_permission 表
|
||||
# 使用 gvsdsdk RBAC 表(UserRole → RolePermission → 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())
|
||||
user_uuid = current_user.UserUUID
|
||||
role_uuids = list(SdkUserRole.objects.filter(
|
||||
UserUUID=user_uuid
|
||||
).values_list('RoleUUID', flat=True))
|
||||
|
||||
if role_uuids:
|
||||
perm_uuids = list(SdkRolePermission.objects.filter(
|
||||
RoleUUID__in=role_uuids
|
||||
).values_list('PermUUID', flat=True))
|
||||
|
||||
permissions = list(SdkPermission.objects.filter(
|
||||
PermUUID__in=perm_uuids,
|
||||
PermStatus=1
|
||||
).values_list('PermCode', 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 current_user.IsSuperuser and '000001' not in permissions:
|
||||
permissions.insert(0, '000001')
|
||||
|
||||
if not permissions:
|
||||
logger.warning(f"用户 {current_user.phone} 没有任何权限,请检查角色分配")
|
||||
|
||||
Reference in New Issue
Block a user