feat: add scoped device catalog and unlimited custom area hierarchy
This commit is contained in:
+14
-2
@@ -9,7 +9,9 @@
|
||||
## 对象关系
|
||||
|
||||
```text
|
||||
空间档案(家庭 / 公司 / 其他)
|
||||
管理归属(家庭 / 办公场所 / 工厂,独立权限)
|
||||
└─ 自定义区域树(parentId,不限制层数,禁止循环及跨归属父节点)
|
||||
└─ 空间档案(名称、区域类别及可选地址)
|
||||
├─ 地区:省、市、区县、街道
|
||||
├─ 地址:小区或园区、楼栋、单元、楼层、门牌
|
||||
├─ 所属:家庭或单位
|
||||
@@ -17,6 +19,7 @@
|
||||
│ ├─ 镜头通道 1 → 主码流 / 子码流
|
||||
│ └─ 镜头通道 2 → 主码流 / 子码流
|
||||
└─ 录像机对象(地址、接入驱动、账号、空间引用)
|
||||
└─ 其他设备档案(灯、手机、冰箱或自定类型,暂不含控制驱动)
|
||||
|
||||
每个镜头通道分别关联:
|
||||
实时来源:直接摄像头 / 录像机
|
||||
@@ -76,7 +79,7 @@
|
||||
|
||||
## 家庭边界与管理连续性
|
||||
|
||||
账号 → 一个家庭 → 多个空间 → 设备对象 / 镜头 / 录像机。人物、亲属关系、记事和历史版本也属于一个家庭。
|
||||
账号 → 一个管理归属(家庭 / 办公场所 / 工厂)→ 多级区域 → 设备对象 / 镜头。人物、亲属关系、记事和历史版本也属于同一管理归属。兼容已有接口,数据库仍使用 `households`、`familyId` 命名。
|
||||
|
||||
- `X-Household-Id` 仅供超级管理员选择工作家庭;其余账号只能使用自己的家庭。所有写操作均核验所属家庭与关联对象,不能通过 body 迁移归属。
|
||||
- API 状态与账号列表按家庭过滤。媒体 URL 不依赖前端过滤,每个清单、分片与下载请求均核验摄像头归属和空间授权;超级管理员是明确的特权例外。
|
||||
@@ -86,3 +89,12 @@
|
||||
- 任内负责人不能被直接停用、降级;先交接,再调整账号。交接后原家主保留家庭管理员,必要时由新家主或超级管理员处理其账号。
|
||||
- 家谱人物的去世日期、账号长期未登录、亲属称谓均不触发权限变化。
|
||||
- 首次迁移只回填 `familyId`,不修改凭据或设备路径;旧历史快照也加归属。旧版本没有此隔离能力,多家庭运行后禁止只回退代码。
|
||||
|
||||
|
||||
## 设备分类与区域授权
|
||||
|
||||
`inventory.py` 保存通用设备档案以及所有人、负责人、标签。视频设备继续使用原 `assets`、`recorders`、`cameras` 结构,不迁移凭据、不修改录像配置。前端 `device-model.js` 将三类档案统一为只读目录,按每个归属保存的维度顺序分组。修改分组只改变展示,不移动设备或放宽权限。
|
||||
|
||||
区域以 `parentId` 邻接表表示,创建/移动时在写锁内检查父节点归属、有效性与祖先循环。父链和后代集合均迭代计算,避免递归栈形成层数限制。用户的 `includeSubspaces` 默认关闭;开启后按当前区域树实时扩展 `siteIds`。修改该授权开关会撤销已有会话。人员归属是文本档案,不参与权限计算。
|
||||
|
||||
新增接口:`POST /api/devices` 保存通用设备(要求当前归属管理员);`POST /api/device-view` 保存当前归属默认分组顺序。统一状态的 `devices` 数组也经过归属和成员区域过滤。
|
||||
|
||||
Reference in New Issue
Block a user