From 051801610ccab33df22f4150b93ce7ab9d8aedaf Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Thu, 29 Oct 2026 18:10:45 +0800 Subject: [PATCH] feat: Permission bits use hexadecimal. --- apps/users/serializers/user.py | 4 ++-- ui/src/api/admin/auth/types.ts | 4 ++-- ui/src/stores/admin/user.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index 002541315ef..2eb5e81429a 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -120,7 +120,7 @@ def check_verify_code_attempts(email: str, type_code: str, submitted_code: str) class UserProfileResponse(serializers.ModelSerializer): is_edit_password = serializers.BooleanField(required=True, label=_("Is Edit Password")) - permissions = serializers.ListField(required=True, label=_("permissions")) + permissions = serializers.DictField(child=serializers.CharField(), required=True, label=_("permissions")) class Meta: model = User @@ -273,7 +273,7 @@ def profile(user: User, auth: Auth): "email": user.email, "source": user.source, "role": list(auth.roles), - "permissions": auth.permissions, + "permissions": {k: format(v, "x") for k, v in auth.permissions.items()}, "is_edit_password": _is_default_password(CONFIG.get("DEFAULT_PASSWORD", "MaxKB@123.."), user.password) if user.source == "LOCAL" else False, diff --git a/ui/src/api/admin/auth/types.ts b/ui/src/api/admin/auth/types.ts index 70fdffa8666..dd445da15eb 100644 --- a/ui/src/api/admin/auth/types.ts +++ b/ui/src/api/admin/auth/types.ts @@ -8,8 +8,8 @@ export interface CurrentUserInfo { is_edit_password?: boolean language?: string nick_name: string - /** 权限位图:key 为「组(+工作空间+资源)」,value 为该组内操作授权位的按位或。 */ - permissions: Record + /** 权限位图:key 为「组(+工作空间+资源)」,value 为该组内操作授权位按位或的十六进制字符串(不带 0x 前缀,避免超过 2^53 丢精度)。 */ + permissions: Record role: string[] role_name?: string[] source?: string diff --git a/ui/src/stores/admin/user.ts b/ui/src/stores/admin/user.ts index d829e686e46..5460511c728 100644 --- a/ui/src/stores/admin/user.ts +++ b/ui/src/stores/admin/user.ts @@ -30,7 +30,7 @@ export const useUserStore = defineStore('user', { const source = state.userInfo?.permissions ?? {} const result = new Map() for (const [key, value] of Object.entries(source)) { - result.set(key, BigInt(value ?? 0)) + result.set(key, value ? BigInt(`0x${value}`) : 0n) } return result },