liuyun 1790fb30a8 chore(openspec): archive close-phase-0, sync backend specs to main
- 归档 close-phase-0(RBAC 权限 + 审计/登录日志 + seed 收口)
- 新增主 spec:backend/auth、backend/res、backend/audit、backend/login
- 追踪 sysmgr-nest passwordHash 泄漏修复

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-10 23:23:56 +08:00

45 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Auth Specification
## Purpose
定义后端三级鉴权的执行语义与超级管理员绕过规则,作为所有接口访问控制的统一契约。
## Requirements
### Requirement: 三级鉴权
系统 SHALL 对每个接口按三级放行:标注 `@Public` 的接口无需登录即可访问;未标注任何权限装饰器的接口仅校验有效登录态;标注 `@RequirePermissions` 的接口要求登录态且当前用户拥有对应权限码。
#### Scenario: 公开接口匿名访问
- **WHEN** 请求标注 `@Public` 的接口(如登录、刷新 token、接口文档)
- **THEN** 系统无需 token 即放行
#### Scenario: 未标注接口仅校验登录
- **WHEN** 未登录请求未标注权限装饰器的接口
- **THEN** 系统返回 401 未登录
#### Scenario: 未标注接口登录后放行
- **WHEN** 已登录用户请求未标注权限装饰器的接口
- **THEN** 系统放行
#### Scenario: 需权限接口无权限码
- **WHEN** 已登录用户请求 `@RequirePermissions('user:create')` 的接口,但其权限集不含 `user:create`
- **THEN** 系统返回 403 无权限
### Requirement: 权限集入上下文
登录成功 SHALL 将用户的权限码集合(其全部角色经资源关联聚合得到的 api/button 资源 code)载入请求上下文,供权限守卫校验。
#### Scenario: 登录聚合权限
- **WHEN** 用户登录成功
- **THEN** 系统按用户全部角色的 role_resource 关联聚合出权限码集合并载入上下文
### Requirement: 超级管理员绕过
拥有 `code=super_admin` 角色的用户 SHALL 绕过权限码校验;其列表查询的数据权限按「全部」处理,不受 data_scope 过滤。
#### Scenario: 超管访问任意需权限接口
- **WHEN** 拥有 `super_admin` 角色的用户请求任意 `@RequirePermissions` 接口
- **THEN** 系统无需校验其是否拥有该权限码即放行
#### Scenario: 超管查看全量数据
- **WHEN** 超管执行列表查询
- **THEN** 系统不做 data_scope 部门过滤,返回全量数据