第2章:权限需求的用户场景分析
2.1 识别需要权限的角色
权限需求的起点是明确“谁”需要“什么”权限。角色是权限分配的最小单元,一个用户可能属于一个或多个角色。识别角色时,要避免直接以岗位名称替代角色,应当基于用户在特定场景下的行为集合来定义。
经验原则:一个角色用户只属于一个角色组。如果同一个人必须跨组操作,应拆分为“主角色+临时角色”或通过审批流解决,而不是给一个角色挂载过多权限。
核心角色类型清单:
| 角色类型 | 典型岗位 | 权限需求特征 |
|---|---|---|
| 基础操作员 | 录入员、客服、仓库拣货员 | 读写本人/本组数据,无管理或配置权限 |
| 业务主管 | 组长、区域经理 | 读取下属数据,修改本组业务配置 |
| 系统管理员 | IT运维、安全专员 | 全系统配置、用户管理、审计日志 |
| 外部用户 | 客户、供应商、访客 | 仅访问指定门户/数据,不可操作系统后台 |
| 审批者 | 财务总监、风控经理 | 只读业务详情,拥有审批/驳回能力 |
案例:在“订单取消审核”场景中,客服(操作员)发起申请,组长(主管)审核,财务(审批者)复审退款。如果不识别这三个角色,就会导致或权限过大(客服直接退款)或权限缺失(组长看不到详情)。
2.2 用户场景描述模板
场景描述是连接角色与权限的桥梁。一套标准化的场景模板,能够确保需求方、产品经理、开发、测试对“谁在什么情况下做什么”达成一致。
推荐的结构化场景模板:
场景名称:[动词+目标,如“导出月度销售报表”]
触发条件:[时间/事件/用户主动操作]
前置条件:[用户必须已登录/拥有某个基础角色]
参与角色:[场景中涉及的所有角色,用“主要”、“辅助”标注]
场景流程:
1. [主要角色] 发起操作
2. [系统] 验证当前角色是否具备该操作的权限
3. [主要角色] 填写/选择必要参数
4. [系统] 执行并返回结果
后置条件:[数据状态变化/日志记录/通知发送]
异常流程:
- 权限不足时:返回无权限提示,不暴露数据
- 数据不存在时:返回空结果,不报错
常见返工点:很多PRD只写“管理员可以修改”,但未描述“修改时是否需要原密码验证”、“修改后是否需要主管审批”、“修改记录是否保留”。场景模板必须补全后置条件和异常流程。
2.3 场景与权限的对应关系
每个用户场景都会映射到一组权限点。一个场景可能涉及多个权限点(查看、新建、修改、删除),同一个权限点也可能被多个场景复用。下图展示了从场景到权限的典型映射链路。
场景与权限的对应关系表:
| 场景编号 | 场景名称 | 主要角色 | 所需权限 | 权限类型 |
|---|---|---|---|---|
| SCN-001 | 提交退款申请 | 客服 | refund:apply | 创建(Create) |
| SCN-002 | 审核退款申请 | 主管 | refund:review | 更新(Update) |
| SCN-003 | 查看退款报表 | 经理 | report:refund:read | 读取(Read) |
| SCN-004 | 取消待审核退款 | 客服 | refund:cancel | 删除(Delete) |
模板应用示例:假设我们做“SaaS企业版后台”产品的权限需求,用上述模板填写“场景A:企业管理员邀请新成员”:
触发条件:管理员点击“添加成员”按钮
前置条件:管理员已登录,且当前企业名额未用满
参与角色:主要:企业超级管理员;辅助:接收邀请的新用户(无权限)
流程:1.管理员填写新成员邮箱与角色 → 2.系统校验管理员是否拥有“invite:create”权限 → 3.系统发送邀请邮件 → 4.新用户点击链接激活
后置条件:邀请记录写入审计日志;企业已用名额+1
异常流程:如果管理员无邀请权限,返回“请联系超级管理员”;如果邮箱已存在,返回“用户已存在”。
触发条件:管理员点击“添加成员”按钮
前置条件:管理员已登录,且当前企业名额未用满
参与角色:主要:企业超级管理员;辅助:接收邀请的新用户(无权限)
流程:1.管理员填写新成员邮箱与角色 → 2.系统校验管理员是否拥有“invite:create”权限 → 3.系统发送邀请邮件 → 4.新用户点击链接激活
后置条件:邀请记录写入审计日志;企业已用名额+1
异常流程:如果管理员无邀请权限,返回“请联系超级管理员”;如果邮箱已存在,返回“用户已存在”。
2.4 从场景描述到权限定义的常见问题
- 角色混淆:将“岗位”直接当作“角色”。例如“客服主管”在审核退款场景中是主管角色,但在查看团队考勤场景中可能是“管理员”角色。必须按场景独立定义角色。
- 权限颗粒度太粗:只定义“客服-读权限、主管-写权限”,无法区分“退款申请创建”和“退款审批更新”。应拆分为原子权限点。
- 遗漏异常场景:只写正常流程,未写“权限不足时”、 “操作被拒绝时”的体验要求,导致开发阶段反复沟通。
- 场景重复覆盖:多个场景描述同一操作,但用了不同的场景名称,导致权限点重复定义。
避坑提醒:场景描述不要写成“用户故事”风格(“作为客服,我想要退款权限,以便处理投诉”),这种描述无法直接支撑权限定义。请使用上述结构化模板,让需求精确到“创建、读取、更新、删除”级别。