From 50f90eeeb8189d824cef369bcef79ff7054b6719 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Wed, 24 Jun 2026 22:15:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=B4=A6=E5=8F=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E9=9A=90=E8=97=8F=E6=9D=83=E9=99=90=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 拆分 account:view_all 和 account:view_full 权限 2. 运营只能看用户名、标签、分配,隐藏密码/邮箱等敏感信息 3. 管理员可看完整字段(需 account:view_full 权限) 4. 所有人都可分配账号给客服 5. 前端添加上传时间列 --- web/backend/permissions.py | 6 +++--- web/backend/routers/accounts.py | 4 ++-- web/frontend/src/pages/AccountsPage.tsx | 11 ++++++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/web/backend/permissions.py b/web/backend/permissions.py index a6181df..10048fd 100644 --- a/web/backend/permissions.py +++ b/web/backend/permissions.py @@ -9,8 +9,9 @@ PERMISSIONS = { "user:delete": "删除用户", "user:assign_permissions": "分配权限", # 账号管理 - "account:view_all": "查看所有账号(完整字段)", - "account:view_assigned": "查看分配给自己的账号(仅用户名)", + "account:view_all": "查看所有账号(仅用户名、标签、分配)", + "account:view_full": "查看账号完整字段(密码/邮箱,仅管理员)", + "account:view_assigned": "查看分配给自己的账号", "account:import": "导入账号", "account:assign": "分配账号给客服", "account:delete": "删除账号", @@ -37,7 +38,6 @@ ROLE_PERMISSIONS = { "account:view_all", "account:import", "account:assign", - "account:delete", "login:batch", "login:view_all", "cookie:view", diff --git a/web/backend/routers/accounts.py b/web/backend/routers/accounts.py index ed185a3..9891f57 100644 --- a/web/backend/routers/accounts.py +++ b/web/backend/routers/accounts.py @@ -54,8 +54,8 @@ def list_accounts( assigned_username=acc.assigned_user.username if acc.assigned_user else None, created_at=acc.created_at, ) - # 运营+超管可看完整字段 - if user_has_permission(current, "account:view_all"): + # 只有管理员可看完整字段(密码、邮箱等) + if user_has_permission(current, "account:view_full"): item.password = acc.password item.email = acc.email item.email_password = acc.email_password diff --git a/web/frontend/src/pages/AccountsPage.tsx b/web/frontend/src/pages/AccountsPage.tsx index 5d67a1b..214c054 100644 --- a/web/frontend/src/pages/AccountsPage.tsx +++ b/web/frontend/src/pages/AccountsPage.tsx @@ -7,6 +7,7 @@ import type { TableProps } from 'antd'; import { ImportOutlined, DeleteOutlined, TagOutlined, FilterOutlined } from '@ant-design/icons'; import { accountApi, userApi, type AccountItem, type UserInfo } from '../api/modules'; import { usePermissions } from '../hooks/usePermissions'; +import { formatTime } from '../utils/time'; import { getErrorMessage } from '../utils/error'; const { TextArea } = Input; @@ -36,6 +37,7 @@ export default function AccountsPage() { const { can } = usePermissions(); const canViewAll = can('account:view_all'); + const canViewFull = can('account:view_full'); const canImport = can('account:import'); const canAssign = can('account:assign'); const canDelete = can('account:delete'); @@ -218,9 +220,16 @@ export default function AccountsPage() { return {tag}; }, }, + { + title: '上传时间', + dataIndex: 'created_at', + width: 180, + render: (val: string | null) => val ? formatTime(val) : -, + }, ]; - if (canViewAll) { + // 只有管理员可看完整字段(密码、邮箱等) + if (canViewFull) { columns.push( { title: '密码', dataIndex: 'password', width: 120 }, { title: '邮箱', dataIndex: 'email' },