lab-edu 管理后台与操作级授权需求¶
已确认输入:按角色分配“资源 × 操作”权限,自助注册,原会话策略。 本文已于 2026-10-29 经用户整稿确认生效,批准依据见评审记录(本地资料,未发布)。 上位依据:项目宪法、路线图、文档规范。鉴权与注册规则引用鉴权需求,不在此另定密码、超时和登录失败阈值。
1. 概述¶
目标与范围¶
让获授权的管理员管理账户、角色、权限绑定与现有导航目录,并验证“能看不等于能改”。管理区始终按具体操作许可决定访问结果,不能只根据角色名称放行所有管理操作。
本规格规定保留 admin、teacher、student 三个内置角色,允许创建自定义角色;每个账户恰好分配一个角色。只读管理员可以使用独立自定义角色,避免修改一个内置角色就改变全部教师或学生的权限。多角色合并与个人例外不纳入本期。
范围外¶
- 不设计实验任务、报告、评分及其权限。
- 不加入个人授权例外、通用数据行或字段级授权、任意条件规则编辑器。
- 不加入消息通知、报表、导入导出、审计日志增强或多端支持。
- 不提供管理员创建普通账户页面,普通用户通过自助注册进入;不做批量账户操作、账户删除或公开身份核验。
- 不开放自由新增权限、运行时创建页面、任意外部导航或任意地址跳转。
2. 管理规则与责任边界¶
| 事项 | 正式方案 | 边界 |
|---|---|---|
| 角色模型 | 三个内置角色加可创建的自定义角色;每账户一个角色 | 自定义角色已随整稿批准;不额外增加用户身份类别或后续业务 |
| 初始分配 | admin 具有本期管理许可;teacher/student 只有本人能力;注册默认 student | 自定义角色按明确许可进入管理区;不能把 teacher/student 的默认拒绝写成独立角色黑名单 |
| 注册安全 | student 的基础权限集合受保护,不能增加管理许可;其角色名称与用途固定 | 防止修改默认角色导致所有既有及新注册者自动获得管理能力;有管理职责的账户须显式换到已批准的管理角色 |
| 角色编辑 | 自定义角色可编辑已有权限绑定;内置角色不能重命名、删除;teacher 的基础定位不用于附加管理许可 | 本期教师/学生没有实验业务,故不为其提前增加业务权限。角色上的本人能力由鉴权规格约束,不可借编辑移除 |
| 目录来源 | 权限目录和页面目录由已交付功能提供;后台只配置已有项 | 自由填写名称不产生可执行权限或页面 |
| 导航管理 | 允许编辑已有菜单的显示名称、同级顺序及显示开关;不允许新增任意地址或变更对应权限 | 隐藏菜单不撤销操作权限,菜单显示也不能授予权限 |
| 授权变更 | 角色权限改变撤销所有关联账户的旧会话;角色重新分配撤销该账户全部旧会话 | 沿用鉴权规格的变更边界;已完成的操作无法事后撤回 |
| 服务恢复 | 始终保留至少一个启用且具有恢复能力的内置 admin 账户 | 自定义管理角色不代替内置恢复管理员;恢复权限集合见 §4 |
3. 用户故事¶
US1:获授权查看管理信息(P1)¶
作为管理员,我能查看用户列表、用户详情和本人可用的管理入口;没有查看许可的账户无法绕过入口读取数据。
- Why this priority:列表、详情和拒绝访问构成独立可运行的首个管理闭环,无需先做角色编辑页面。
- Independent Test:受控初始化一个完整管理员、一个只读管理角色及其账户、一个普通账户;准备 25 个无真实个人信息的样例用户,分别验证列表、筛选、翻页和直接访问。
- 验收场景:
- Given 拥有进入管理区和查看用户许可的账户,When 打开用户列表,Then 看到账户名称、角色与状态,不能看到密码或可复用凭证。
- Given 只读管理员,When 尝试禁用用户,Then 操作被拒绝,目标账户状态不变。
- Given 没有查看许可的账户,When 绕过页面直接读取列表,Then 被拒绝且不返回用户记录。
US2:管理账户状态、角色与密码恢复(P2)¶
作为获授权的管理员,我能启用或禁用账户、分配一个角色、重置遗忘的密码,且这些变更及时影响已有访问。
- Why this priority:在自助注册已有账户的基础上管理生命周期,不新增另一套注册方式。
- Independent Test:预置两个恢复管理员和一个普通账户,独立授予或移除每种操作许可;不依赖角色创建页面。
- 验收场景:
- Given 拥有禁用许可且目标不是最后一个恢复管理员,When 确认禁用,Then 目标不能重新登录,旧会话在下一次受保护操作时被拒绝。
- Given 只有查看许可,When 直接发起角色分配或密码重置,Then 两种操作均失败,目标信息不变。
- Given 拥有密码重置许可,When 完成重置,Then 新临时密码只在成功结果中显示一次;关闭后不能再次查询,目标下次登录必须改密。
US3:配置角色与操作许可(P2)¶
作为获授权的管理员,我能创建“只读用户管理员”角色,为它配置进入管理区与查看用户的许可,并将账户分配给它。
- Why this priority:交付用户已选择的按角色分配操作级权限,避免只隐藏按钮而没有实际授权边界。
- Independent Test:预置目标账户和权限目录,完成新建角色、选择许可与分配,验证查看成功而禁用失败;权限目录不是通过本故事新增。
- 验收场景:
- Given 有创建及配置角色许可的管理员,When 只选择进入管理区与查看用户,Then 新角色没有获得禁用、重置密码或授权许可。
- Given 某角色已绑定账户,When 撤销查看用户许可,Then 关联账户全部旧会话失效,重新登录后不能读取用户列表。
- Given 角色仍被账户使用,When 尝试删除角色,Then 拒绝并显示仍有关联账户,不将账户变为无角色状态。
US4:管理已有菜单的展示(P3)¶
作为获授权的管理员,我能调整已有导航名称、顺序及显示开关,不能借菜单编辑扩大权限。
- Why this priority:满足本期菜单管理,在账户和权限正确后再改善导航。
- Independent Test:准备两个已有菜单项与两种不同权限账户,不依赖角色创建页面,验证改名、排序、隐藏和无权访问。
- 验收场景:
- Given 有菜单编辑许可,When 隐藏一个菜单,Then 导航不再展示;已有操作许可不因隐藏而丢失。
- Given 用户无目标操作许可,When 菜单改名或显示,Then 用户仍不能看到该入口或直接访问目标资源。
4. 操作许可目录与恢复保护¶
本表是需求语义目录,权限标识及接口路径由技术设计确定。进入管理区只是入口许可,不能替代资源操作许可;资源页同时要求进入管理区和该项操作许可。
| 资源 | 独立操作许可 | 依赖和约束 |
|---|---|---|
| 管理区 | 进入 | 不自动包含任何列表或写操作 |
| 用户 | 查看、启用、禁用、分配角色、重置密码 | 操作按各自许可独立核实;启用不包含禁用 |
| 角色 | 查看、创建、修改名称、配置权限、删除 | 删除仅限未被使用的自定义角色;名称修改不改变授权能力 |
| 权限目录 | 查看 | 无新增、删除、自由编辑权限项的能力 |
| 菜单目录 | 查看、编辑展示 | 只能改变已有菜单的展示属性;不改变资源与许可的关联 |
恢复权限集合包含:进入管理区、查看用户、启用用户、分配角色、重置密码、查看角色、配置角色权限、查看权限目录。该集合在内置 admin 角色上不可移除。内置 admin 账户启用数必须至少为 1;并发禁用或降级也必须保持此条件。
赋权规则:操作者必须具有对应的角色配置或角色分配许可;目标角色的管理许可不能超出操作者当前可授予集合。本规格规定可授予集合等于操作者当前拥有的管理许可,不另建授权委托体系。对已持有更大权限集合的角色,低权限操作者不得通过局部编辑间接改变其成员权限。后台必须拒绝整体变更而非静默删除越界许可。
5. 功能需求¶
以下编号仅在本文内使用;引用鉴权需求时显式写出其文件与编号。
| 编号 | 必须满足的行为 | 验证 |
|---|---|---|
| FR-001 | 每个管理页面及其读取/变更操作都要求明确许可;无权请求不返回受保护数据、不改变目标;默认拒绝 | US1;SC-001、002 |
| FR-002 | 用户列表支持按登录名包含匹配、角色和启用状态筛选;默认每页 20 条,可选 50 条;显示匹配总数及空结果 | SC-001 |
| FR-003 | 列表与详情只展示管理需要的登录名、名称、角色和状态;不能返回密码、密码存储内容或可复用登录凭证 | SC-001、002 |
| FR-004 | 启用与禁用分别要求许可,提交前确认目标;变更成功后按鉴权规格更新会话效力 | US2;SC-003 |
| FR-005 | 账户恰好绑定一个存在的角色;管理员分配角色须遵守赋权范围,不能通过注册或普通个人信息修改绕过 | US2、US3;SC-004 |
| FR-006 | 重置密码要求独立许可和目标确认;临时密码由系统产生,只在成功结果中显示一次、不写入普通日志;再次重置产生新的临时密码;旧会话撤销及下次强制改密引用鉴权规格 | US2;SC-005 |
| FR-007 | 角色名称为 1—64 个非空字符,名称去除首尾空格后不得重复;自定义角色可创建与改名,内置角色不能重命名或删除 | US3;SC-006 |
| FR-008 | 角色只能绑定目录中已有的操作许可,不支持通配授权、任意许可字符串、个人例外或数据范围规则 | US3;SC-006、007 |
| FR-009 | 修改角色许可前展示当前集合及变更差异,明确受影响账户数;成功后撤销受影响账户全部旧会话,显示重新登录提示而非错误地继续使用旧许可 | SC-007 |
| FR-010 | 有关联账户的角色不能删除;删除前需确认;不存在的角色或权限引用必须拒绝,不将账户或角色变为半完成状态 | SC-008 |
| FR-011 | 保护 student 的注册用途和普通权限集合;不能通过修改它的许可向现有或新注册用户授予管理能力;teacher 本期同样保持普通身份定位 | SC-009 |
| FR-012 | 按 §4 保护恢复权限与最后一个启用的内置管理员;并发操作不得破坏约束;不能通过自降级、禁用、角色改名或权限编辑绕过 | SC-010 |
| FR-013 | 按 §4 校验赋权范围,比较对象是完整目标角色管理许可集合;拒绝无授权许可的赋权、超出范围的分配/配置,以及对更高权限角色的间接变更 | SC-011 |
| FR-014 | 菜单只在已启用且用户具有目标许可时展示;允许编辑已有菜单的显示名、同级顺序和显示开关;显示名为 1—32 个非空字符;不允许新增任意地址或更改权限映射 | US4;SC-012 |
| FR-015 | 本人身份和退出入口保持可用;修改菜单不能隐藏所有管理恢复入口,且不能影响服务端许可判断 | SC-012 |
| FR-016 | 数据更新失败、冲突或结果未知时不显示成功;变更提交后再次读取确认,不能只依据页面本地状态判定完成;过期编辑必须拒绝并提示重新加载 | SC-013 |
6. 验收标准¶
| 编号 | 可观察结果 | 对应需求 |
|---|---|---|
| SC-001 | 准备 25 个样例账户,默认首屏 20 条、第二页 5 条;登录名、角色、状态各筛选 1 次均符合条件;零匹配显示 0 条,详情无密码或凭证 | FR-002、003 |
| SC-002 | 对普通账户和只读管理账户各尝试读取/禁用/重置密码;普通账户 3 类均拒绝,只读账户只读取成功,非法读取记录数及非法变更数均为 0 | FR-001、003 |
| SC-003 | 对具有启用但无禁用许可的账户测试 2 类操作,仅启用成功;禁用成功的目标在两个浏览器中的旧会话全部不能继续访问 | FR-004 |
| SC-004 | 将 1 个账户从普通角色换为只读管理角色,旧会话失效,重新登录能查看而不能禁用;向不存在角色分配 1 次失败且原角色保持不变 | FR-005 |
| SC-005 | 重置 1 个账户后,旧密码登录成功数为 0,两个旧会话访问均拒绝,新临时密码只显示 1 次;关闭结果后无法查询,使用后必须改密 | FR-006 |
| SC-006 | 创建“只读用户管理员”角色仅绑定 2 项许可,查看可用、禁用与重置均失败;重复名、空名、65 字符名、改内置角色名各拒绝 1 次 | FR-007、008 |
| SC-007 | 某角色关联 2 个账户,每账户 2 个会话;撤销查看许可后 4 个会话均失效,重新登录无查看许可;未知许可及通配许可各拒绝 1 次 | FR-008、009 |
| SC-008 | 有关联账户的角色删除失败 1 次;未使用的自定义角色删除成功 1 次;删除与分配同一角色并发时,不存在无角色或引用已删除角色的账户 | FR-010 |
| SC-009 | 对 student 与 teacher 各尝试添加管理许可 1 次均拒绝;随后自助注册 1 个账户仍无管理许可 | FR-011 |
| SC-010 | 两个启用内置管理员并发互相禁用或降级,最终至少保留 1 个;仅余一个时,禁用、降级、移除恢复许可 3 类操作全部失败 | FR-012 |
| SC-011 | 无配置许可赋权、超范围分配、向角色添加超范围许可、编辑更高权限角色共 4 类操作全部拒绝,目标集合保持不变 | FR-013 |
| SC-012 | 对 2 个已有菜单进行改名、排序、隐藏各 1 次均符合设置;无权账户直接访问仍拒绝;任意地址与权限映射修改各拒绝 1 次,恢复入口不丢失 | FR-014、015 |
| SC-013 | 模拟提交断网、超时、过期表单共 3 类故障,不显示虚假成功、不产生部分权限集合;重新加载显示最终已提交状态 | FR-016 |
Edge Cases(边界条件)¶
- 管理员修改自身角色或权限:提交成功后自己的会话也失效;不得以“保留操作页面”为由绕过撤销。
- 两个管理员同时编辑角色:后提交的过期版本被拒绝,不能覆盖前一份已确认变更。
- 正在分配的角色被删除:分配或删除至少一个失败;账户始终有且只有一个有效角色。
- 撤权与请求并发:变更成功后新进入的操作按新权限核实;不声称撤回已完成操作。
- 已禁用账户仍可保留角色关联,角色删除检查不能忽略禁用账户。
- 重置结果响应丢失:不得从详情读取临时密码;允许有权管理员重新重置,前次临时密码失效。
- 隐藏菜单不是撤权;撤权也不能只等导航刷新,直接操作仍必须拒绝。
7. 假设与关键实体¶
- 用户已自助注册,管理员无需为普通开户手工输入初始密码;临时密码只用于遗忘密码后的重置恢复。
- 每个账户恰好一个角色,不做多角色合并;该简化规则已随整稿批准。
- 角色:一个命名的操作许可集合,可以关联多个账户;内置角色具有保护约束。
- 权限目录项:对已交付资源执行某操作的许可定义;不能由菜单或自由文本创建。
- 菜单项:已有页面的导航展示及其关联许可,具有显示名称、顺序和启用状态。
- 账户、会话与密码状态定义引用鉴权规格,不在本文复制。
8. 设计:结构与流程¶
- 核实当前身份 → 检查进入管理区许可 → 获取本人允许的导航;没有资源许可则不读取资源。
- 打开列表/详情 → 核实查看许可 → 显示数据和可用操作。
- 提交变更 → 核实当前操作许可、目标状态、赋权范围及恢复约束 → 全部通过才提交 → 按影响范围撤销旧会话。
- 更新角色或菜单时读取最新状态,拒绝过期编辑;界面只展示核实后的结果。
9. API 与数据:需求边界¶
| 交互 | 输入语义 | 输出语义 |
|---|---|---|
| 查询用户 | 筛选条件、页码、每页数量 | 允许范围内的账户摘要及总数 |
| 改变账户状态或角色 | 目标账户、已确认操作与预期当前状态 | 成功及会话失效效果,或拒绝/冲突 |
| 重置密码 | 目标账户与重置确认 | 一次性显示的临时密码,或拒绝 |
| 查询与编辑角色 | 目标角色、名称或已有许可集合、读取时状态 | 最新角色、关联账户数、变更差异或冲突 |
| 查询权限目录 | 当前访问上下文 | 当前可查看、可用于配置的目录,不能超出赋权范围 |
| 编辑菜单展示 | 已有菜单与展示属性 | 最新导航或拒绝,不改变授权映射 |
本节只定义业务交互;接口路径、字段类型与存储设计留给技术规划。与正式鉴权规格采用相同章节分工。
10. 评审与验证状态¶
2026-10-29 经用户整稿确认,包括自定义角色、每账户单角色、注册角色保护、有限菜单编辑、赋权范围与管理员恢复保护。详见批准记录(本地资料,未发布)。
- 16 条功能需求、13 条验收标准及引用已做文档检查,尚未实现或通过产品验收。
- 技术自查结论经用户整稿确认,未虚构其他独立评审人。
- 授权与会话单元测试来自宪法 §5;真实越权、赋权范围和并发保护列为集成门槛。