fix: 修复添加后台用户 RoleUUID 转换错误并严格校验角色绑定

This commit is contained in:
XingQue
2026-07-02 16:03:23 +08:00
parent 725a1386c3
commit c7adec20db
2 changed files with 55 additions and 15 deletions

View File

@@ -76,6 +76,38 @@ def resolve_role_by_name(role_name, club_id=None):
return qs.filter(ClubID='').first() or qs.first()
def role_uuid_bytes(role_uuid):
"""RoleUUID 统一转 bytes兼容 UUIDObj / bytes / str"""
from gvsdsdk.model_utils import UUIDObj
if isinstance(role_uuid, bytes):
return role_uuid
return UUIDObj(role_uuid).bytes
def resolve_roles_for_binding(role_names, club_id=None):
"""
按角色名解析并去重;任一角色在当前俱乐部下找不到则整体失败。
返回 (roles, missing_names)。
"""
resolved = []
missing = []
seen_bytes = set()
for raw in role_names or []:
name = (raw or '').strip()
if not name:
continue
role = resolve_role_by_name(name, club_id)
if not role:
missing.append(name)
continue
key = role_uuid_bytes(role.RoleUUID)
if key in seen_bytes:
continue
seen_bytes.add(key)
resolved.append(role)
return resolved, missing
def user_bound_role_names(user):
from backend.utils import _legacy_backend_role_permissions