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. 设计:结构与流程

  1. 核实当前身份 → 检查进入管理区许可 → 获取本人允许的导航;没有资源许可则不读取资源。
  2. 打开列表/详情 → 核实查看许可 → 显示数据和可用操作。
  3. 提交变更 → 核实当前操作许可、目标状态、赋权范围及恢复约束 → 全部通过才提交 → 按影响范围撤销旧会话。
  4. 更新角色或菜单时读取最新状态,拒绝过期编辑;界面只展示核实后的结果。

9. API 与数据:需求边界

交互 输入语义 输出语义
查询用户 筛选条件、页码、每页数量 允许范围内的账户摘要及总数
改变账户状态或角色 目标账户、已确认操作与预期当前状态 成功及会话失效效果,或拒绝/冲突
重置密码 目标账户与重置确认 一次性显示的临时密码,或拒绝
查询与编辑角色 目标角色、名称或已有许可集合、读取时状态 最新角色、关联账户数、变更差异或冲突
查询权限目录 当前访问上下文 当前可查看、可用于配置的目录,不能超出赋权范围
编辑菜单展示 已有菜单与展示属性 最新导航或拒绝,不改变授权映射

本节只定义业务交互;接口路径、字段类型与存储设计留给技术规划。与正式鉴权规格采用相同章节分工。

10. 评审与验证状态

2026-10-29 经用户整稿确认,包括自定义角色、每账户单角色、注册角色保护、有限菜单编辑、赋权范围与管理员恢复保护。详见批准记录(本地资料,未发布)。

  • 16 条功能需求、13 条验收标准及引用已做文档检查,尚未实现或通过产品验收。
  • 技术自查结论经用户整稿确认,未虚构其他独立评审人。
  • 授权与会话单元测试来自宪法 §5;真实越权、赋权范围和并发保护列为集成门槛。