fix: 修复添加后台用户 RoleUUID 转换错误并严格校验角色绑定
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user