完善角色权限与数据隔离

This commit is contained in:
yml2213
2026-07-26 14:00:50 +08:00
parent b483cbc26d
commit 16d9ab0e5e
38 changed files with 2847 additions and 292 deletions
+358
View File
@@ -0,0 +1,358 @@
# 在线客服系统权限控制页面需求文档
## 1 需求背景与目标
当前在线客服系统已具备工作台、客户管理、对话记录、知识库、快捷回复、黑名单、数据统计、系统设置八大模块。随着客服团队规模扩大,需要为不同岗位配置差异化的功能访问与操作权限,避免普通客服误改系统配置,同时让主管能够管理团队数据而不触及租户级配置。
### 1.1 业务目标
- 建立 管理员、客服主管、客服 三级角色体系,覆盖租户内全部功能模块。
- 提供可视化的 角色管理与权限配置页面,管理员可自定义角色权限并分配给账号。
- 明确每个角色的 菜单可见范围、页面操作权限、数据隔离范围,降低越权风险。
### 1.2 范围说明
本期权限控制聚焦于租户内部的角色与账号管理,不包含平台级多租户运营权限。默认内置三个角色:管理员、客服主管、客服。管理员可新建自定义角色,但系统保留对内置角色的保护(不可删除、不可修改角色标识)。
## 2 角色定义
| 角色 | 定位 | 数据范围 | 核心能力 |
| --- | --- | --- | --- |
| 管理员 | 租户最高权限,通常是企业客服负责人或 IT 管理员 | 全租户数据 | 管理账号与角色、配置系统设置、查看全部数据、操作所有模块 |
| 客服主管 | 一线客服团队管理者 | 全租户数据(查看),操作受限于权限项 | 监控团队会话、管理团队绩效、维护知识库与快捷回复、管理黑名单 |
| 客服 | 一线接待人员 | 仅自己的会话与客户数据 | 使用工作台接待访客、使用知识库/快捷回复、维护自己接待的客户资料 |
## 3 系统模块清单
根据现有系统设计,本次权限控制需要覆盖以下模块与页面。每个模块拆分为「查看」与「操作」两类权限,部分模块还需细分数据范围。
| 一级模块 | 二级页面/功能 | 权限项说明 |
| --- | --- | --- |
| 工作台 | 会话列表、聊天区、客户信息面板 | 查看会话、回复消息、转接会话、结束会话、添加内部备注、标记优先级 |
| 客户管理 | 客户列表、客户详情抽屉 | 查看客户、新增客户、编辑客户、导出客户、管理客户标签、查看全部/仅自己客户 |
| 对话记录 | 会话记录列表、会话详情 | 查看对话记录、导出记录、批量归档、查看全部/仅自己记录 |
| 知识库 | 知识分类、知识条目 | 查看知识库、新建条目、编辑条目、发布/下架、删除条目、管理分类 |
| 快捷回复 | 团队快捷回复、我的快捷回复 | 查看快捷回复、新建团队回复、编辑团队回复、删除团队回复、管理个人回复 |
| 黑名单 | 黑名单列表 | 查看黑名单、拉黑访客/设备、解除黑名单 |
| 数据统计 | KPI 看板、趋势图、绩效排行 | 查看数据统计、导出报告、查看团队/个人数据 |
| 系统设置 | 基本设置、渠道管理、坐席账号、客服分配规则、客户标签、自动回复、工作时间、通知设置 | 查看设置、修改各子项配置 |
| 权限控制 | 角色管理、权限配置、成员账号 | 查看角色、创建/编辑角色、删除自定义角色、分配角色给账号 |
## 4 角色权限矩阵
下表定义三个内置角色的默认权限。符号说明:**√** 表示拥有权限,**○** 表示仅查看/仅自己数据,**×** 表示无权限。
| 模块 | 权限项 | 管理员 | 客服主管 | 客服 |
| --- | --- | --- | --- | --- |
| 工作台 | 查看会话列表 | √ | √ | √ |
| 回复访客消息 | √ | √ | √ |
| 转接会话给其他客服 | √ | √ | × |
| 结束会话 | √ | √ | √ |
| 添加内部备注 | √ | √ | √ |
| 标记会话优先级 | √ | √ | ○(仅自己) |
| 客户管理 | 查看客户列表 | √ | √ | ○(仅自己) |
| 新增客户 | √ | √ | √ |
| 编辑客户资料 | √ | √ | ○(仅自己) |
| 导出客户 | √ | √ | × |
| 管理客户标签 | √ | √ | ○(仅自己客户) |
| 对话记录 | 查看对话记录 | √ | √ | ○(仅自己) |
| 查看会话详情 | √ | √ | ○(仅自己) |
| 导出对话记录 | √ | √ | × |
| 批量归档记录 | √ | √ | × |
| 知识库 | 查看知识库 | √ | √ | √ |
| 新建知识条目 | √ | √ | × |
| 编辑知识条目 | √ | √ | × |
| 发布/下架条目 | √ | √ | × |
| 删除知识条目/分类 | √ | ○(主管可删除自己创建) | × |
| 快捷回复 | 查看快捷回复 | √ | √ | √ |
| 新建团队快捷回复 | √ | √ | × |
| 编辑/删除团队回复 | √ | √ | × |
| 管理我的快捷回复 | √ | √ | √ |
| 黑名单 | 查看黑名单 | √ | √ | × |
| 拉黑访客/IP/设备 | √ | √ | × |
| 解除黑名单 | √ | √ | × |
| 数据统计 | 查看数据统计 | √ | √ | ○(仅个人) |
| 导出报告 | √ | √ | × |
| 查看客服绩效排行 | √ | √ | ○(仅自己排名) |
| 系统设置 | 基本设置 | √ | × | × |
| 渠道管理 | √ | × | × |
| 坐席账号 | √ | × | × |
| 客服分配规则 | √ | × | × |
| 客户标签 | √ | √ | × |
| 自动回复 | √ | √ | × |
| 工作时间 | √ | × | × |
| 通知设置 | √ | × | × |
| 权限控制 | 查看角色列表 | √ | × | × |
| 创建/编辑角色 | √ | × | × |
| 删除自定义角色 | √ | × | × |
| 给账号分配角色 | √ | × | × |
**数据隔离原则**:客服角色在所有模块中默认只能看到「自己接待的会话」和「自己创建/跟进过的客户」;客服主管与管理员可查看全租户数据,但主管的操作权限受限于矩阵中的勾选范围。
## 5 页面原型设计
权限控制模块包含三个核心页面:角色管理列表、角色权限配置、成员账号管理。以下原型展示页面布局、字段与主要交互,开发时可作为视觉与交互参考。
### 5.1 角色管理列表页
管理员进入「系统设置 > 权限控制 > 角色管理」后,看到租户内所有角色卡片。内置角色不可删除、不可修改标识,仅可调整权限范围;自定义角色支持完整编辑与删除。
角色管理列表
客服云
工作台
客户管理
对话记录
知识库
快捷回复
黑名单
数据统计
系统设置
角色管理
\+ 新建角色
角色列表
成员账号
操作日志
内置 管理员
配置权限
租户最高权限,可管理账号、角色与全部系统设置。不可删除。
成员数:1权限项:38/38最后更新:系统默认
内置 客服主管
配置权限
管理一线团队,可查看全部数据并维护知识库、快捷回复、黑名单等。
成员数:3权限项:24/38最后更新:2026-07-18
内置 客服
配置权限
一线接待人员,仅可查看和操作自己相关的会话、客户与个人数据。
成员数:12权限项:14/38最后更新:系统默认
自定义 VIP 专属客服
配置权限
删除
基于客服角色扩展,可查看被分配为高优先级客户的资料,但不可导出数据。
成员数:2权限项:16/38最后更新:2026-07-15
**列表页字段说明**:角色名称、类型(内置/自定义)、成员数、已启用权限项数量、最近更新时间、操作按钮。点击「配置权限」进入角色权限配置页。
### 5.2 角色权限配置页
该页面为角色勾选可访问模块与具体权限项。左侧按模块分组,右侧展示权限项;每个模块支持「查看」与「操作」两类权限,数据范围通过下拉选项单独配置。
配置角色:客服主管
客服主管
内置角色 · 标识 supervisor · 3 位成员
取消
保存
工作台 数据范围:全部会话
查看会话列表
回复访客消息
转接会话
结束会话
添加内部备注
标记优先级
客户管理 数据范围:全部客户
查看客户列表
新增客户
编辑客户资料
导出客户
管理客户标签
系统设置 仅部分子项
客户标签
自动回复
基本设置
渠道管理
坐席账号
工作时间
**交互规则:**取消「查看」权限时,该模块下所有「操作」权限自动取消勾选;勾选任意「操作」权限时,「查看」权限自动勾选。数据范围选项随模块不同而变化(全部 / 仅自己 / 指定分组)。
### 5.3 成员账号管理页
成员账号页用于查看所有系统账号、分配角色、控制账号状态。只有管理员拥有完整编辑权限;客服主管可在被授权的情况下查看成员列表(本期暂不开放给主管)。
成员账号管理
客服云
工作台
客户管理
对话记录
知识库
快捷回复
黑名单
数据统计
系统设置
成员账号
\+ 新增账号
| 账号 | 姓名 | 角色 | 状态 | 最近登录 | 操作 |
| --- | --- | --- | --- | --- | --- |
| admin@company.com | 赵总 | 管理员 | 在线 | 2026-07-19 16:52 | 编辑 |
| supervisor@company.com | 李主管 | 客服主管 | 在线 | 2026-07-19 15:30 | 编辑 |
| agent01@company.com | 王小明 | 客服 | 离线 | 2026-07-18 09:15 | 编辑 |
| vip01@company.com | 张小红 | VIP 专属客服 | 在线 | 2026-07-19 14:20 | 编辑 |
**批量操作:**选中多个账号后可批量「启用/停用」或「批量更换角色」。被停用的账号立即失去系统访问权限,已登录会话在下次请求时鉴权失败并跳转登录页。
## 6 权限逻辑规则
权限控制需要在路由、页面元素、数据查询、接口四个层面生效。以下规则确保同一套权限配置在前后端保持一致,防止越权。
### 6.1 菜单与路由控制
- 用户登录后,前端根据当前账号角色获取 可见菜单列表,未授权的菜单不在侧边栏渲染。
- 用户直接输入未授权页面的 URL 时,前端路由守卫拦截并跳转至「无权访问」提示页或工作台。
- 权限控制模块本身仅对管理员可见,其他角色即使知道路径也无法进入。
### 6.2 页面元素控制
- 每个操作按钮绑定独立权限码,前端根据权限码的布尔值决定是否渲染。
- 对客服角色,页面中「导出」「删除」「批量操作」等按钮默认隐藏,避免误操作。
- 数据范围相关的筛选器(如「全部客服 / 我的数据」)根据角色默认选中并锁定不可修改。
### 6.3 数据查询隔离
- **客服**:客户管理、对话记录、数据统计等模块的 SQL 查询必须附加 owner_id = current_user_id 条件,仅返回自己接待或跟进的数据。
- **客服主管**:默认返回全租户数据;若主管被配置为仅查看指定分组,则按分组过滤。
- **管理员**:返回全租户数据,不受额外数据范围限制。
### 6.4 后端接口鉴权
- 所有写操作接口(POST/PUT/DELETE)必须在网关层校验当前账号是否具备对应权限码。
- 接口鉴权不依赖前端隐藏,必须基于服务端角色权限表实时判断。
- 对于「查看」类接口,除了校验权限码,还需校验数据范围参数是否超出角色允许范围。
### 6.5 权限生效时机
- 角色权限保存后,下一次请求即时生效,不需要用户重新登录。
- 账号被禁用或角色被变更时,服务端 Token 可保持有效期,但在每次请求时校验账号状态与角色绑定。
- 对于长连接场景(如 WebSocket 会话通道),服务端在推送消息前校验该客服是否仍有权限接收对应会话消息。
## 7 边界情况与异常处理
### 7.1 内置角色保护
管理员、客服主管、客服为系统内置角色,拥有固定角色标识(admin、supervisor、agent)。这些角色不可删除、不可修改标识、不可清空全部权限,防止系统失去基础管理能力。
### 7.2 删除自定义角色
删除自定义角色前,系统需校验该角色下是否仍有账号。若存在绑定账号,则禁止删除并提示「请先为该角色下 N 个账号更换角色」。删除后,原绑定账号默认降级为「客服」角色,需管理员二次确认。
### 7.3 唯一管理员的保护
当租户内仅剩一个管理员账号时,该账号不可被删除、不可被禁用、不可被降级为其他角色。若管理员需要离职,必须先创建或提升另一个账号为管理员。
### 7.4 账号状态与权限
- **启用**:账号正常拥有角色对应权限。
- **停用**:账号立即失去所有权限,已登录状态在下次请求时被踢出。
- **待激活**:新创建账号但未完成首次登录,角色已分配但不计入在线客服数。
### 7.5 数据越权访问
若用户通过接口篡改参数(如将 agent_id 改为他人 ID)试图查看他人数据,服务端应拒绝并记录审计日志。对于频繁越权尝试的账号,可触发风控策略临时锁定。
### 7.6 角色变更后的会话处理
管理员在客服正在接待访客时调整其角色(如从客服主管降级为客服),该客服已接待的会话不受影响,可继续处理;但变更后新进入的会话按新权限规则分配。若变更导致该客服失去工作台权限,则系统 gracefully 关闭其会话通道并提示重新登录。
## 8 非功能性需求
### 8.1 性能
- 权限列表查询接口响应时间 ≤ 200ms(P95)。
- 单次登录后权限数据可缓存于前端,权限变更时通过 WebSocket 或接口响应头通知刷新。
### 8.2 安全性
- 角色权限数据存储需与业务数据同等级别保护,防止越权篡改。
- 所有权限变更操作记录审计日志,包括操作人、时间、变更前后权限快照。
- 敏感操作(如删除角色、变更管理员角色)需二次确认或输入账号密码确认。
### 8.3 可扩展性
- 权限项采用码表形式维护,新增模块时只需插入新的权限码即可,无需修改角色表结构。
- 角色与权限之间为多对多关系,支持未来扩展更多自定义角色。
- 数据范围字段预留扩展字段,支持未来按客服分组、按渠道、按客户标签等维度隔离。
### 8.4 兼容性
- 老版本账号首次迁移至新权限体系时,默认映射为「客服」角色,管理员可后续调整。
- 未命中任何角色的账号(异常数据)默认无任何权限,登录后仅显示「联系管理员」页面。
## 9 验收标准
以下验收标准用于判断权限控制功能是否达到可上线状态。
| 编号 | 验收项 | 通过标准 |
| --- | --- | --- |
| A1 | 角色列表 | 管理员可见内置与自定义角色,非管理员无法访问权限控制菜单与页面 |
| A2 | 权限配置 | 管理员可编辑角色权限并保存,保存后下次请求即时生效;内置角色标识不可修改 |
| A3 | 菜单控制 | 客服登录后侧边栏不显示「系统设置」「权限控制」「黑名单」「数据统计」等未授权菜单 |
| A4 | 按钮控制 | 客服在工作台、客户管理、对话记录等页面看不到「导出」「批量操作」「删除」等按钮 |
| A5 | 数据隔离 | 客服只能查看自己接待的会话与跟进客户;主管可查看全租户数据;管理员可查看全部 |
| A6 | 接口鉴权 | 使用客服账号 Token 调用主管/管理员接口返回 403,并在审计日志中记录 |
| A7 | 成员管理 | 管理员可新增、编辑、停用账号并分配角色;停用账号立即无法访问系统 |
| A8 | 边界保护 | 无法删除最后一个管理员,删除自定义角色时提示迁移账号,越权操作被拦截 |