权限与安全治理
身份与权限
平台采用租户、用户、角色、菜单、按钮和数据范围的多层权限模型。平台管理员可管理租户与全局业务,运营商管理员维护本租户场站与资源,场站方账号只能访问本场站数据。

安全治理解决的是“谁能看、谁能改、谁能确认结算”的问题。平台把租户、场站、人员、角色和按钮权限拆开管理,既支持平台托管多个运营商,也避免场站用户看到别家站点或误操作结算。
认证链路
登录请求经 vpp-auth 服务签发令牌,令牌经 Redis 管理并支持刷新与失效;网关在路由前完成令牌校验,业务服务通过安全框架解析用户上下文。登录日志与在线用户由系统模块统一记录,可查询登录时间、地点与结果。
接口权限
业务接口按功能点授权,控制器方法标注权限标识,例如:
@RequiresPermissions("vpp:event:list") // 事件列表
@RequiresPermissions("vpp:apply:confirm") // 申报确认
@RequiresPermissions("vpp:settlement:pay")// 打款登记
菜单控制“能否进入页面”,按钮权限控制“能否执行动作”,两者在角色管理中独立配置。高危动作(申报确认、分配下发、结算确认、打款登记)建议只授予专职角色。
数据隔离
- 所有
dr_业务表携带tenant_id,运营商租户查询由后端自动附加租户条件。 - 平台侧租户拥有全局视角,查看跨租户汇总。
- 场站角色由场站记录关联的账号识别,列表与详情自动收窄到本场站。
- 数据范围校验在后端完成,不依赖前端隐藏菜单或按钮。
平台管理员 -> 全部租户、全部场站
运营商用户 -> 本租户旗下场站
场站账号 -> 场站记录关联的单个场站
角色体系
| 角色 | 典型权限 |
|---|---|
| 平台管理员 | 事件发布、申报确认、分账维护、全局结算、运营商套餐与运营商管理 |
| 运营商管理员 | 场站与桩台账维护、组织申报、确认运营商分配、查看本租户结算 |
| 场站方 | 查看调度目标、跟踪执行、查看我的收益 |
| 调度运营 | 分配生成与下发、执行监测、偏差跟踪 |
| 结算财务 | 结算生成、确认结算、打款登记、导出 |
角色与菜单权限基于 RBAC 模型维护,用户可同时持有多个角色,权限取并集。
可观测与审计
| 范围 | 记录内容 |
|---|---|
| 用户访问 | 登录日志、在线用户、异常认证 |
| 操作行为 | 操作日志:操作人、时间、接口、参数与结果 |
| 配置变更 | 场站、台账、分账比例的修改人与修改时间 |
| 业务动作 | 申报确认、分配下发、评估生成、结算确认的创建/更新留痕 |
所有业务表保留创建人、创建时间、更新人、更新时间字段,结算与评估等经营结果不做物理删除,仅逻辑删除,保证争议可追溯。
凭据安全
数据库、Redis、Nacos 等组件凭据通过配置中心与环境变量注入,不写入代码仓库;生产部署应替换种子配置中的默认密码。网关与认证服务的令牌密钥按环境隔离,演示环境与生产环境不共用。
上线基线
- 应用、数据库和缓存节点保持时间同步,事件状态流转依赖时钟准确。
- 默认账号密码、演示租户数据在生产上线前完成清理或改密。
- 定时任务单实例部署即可满足当前规模;多实例部署前需为状态流转与采集任务引入分布式锁。
- 发布前准备数据库脚本回滚说明(
witos_platform.sql与vpp_dr.sql版本对应)。
威胁模型
重点防护对象包括租户越权、结算金额篡改与高危按钮误操作。接口层依赖令牌与权限标识双重校验;结算金额由服务端按电量与比例计算,前端提交的金额字段不作为入账依据;申报、分配、结算的状态变更均校验当前状态合法性,防止跳状态操作。
企业级治理能力
| 治理维度 | 能力说明 | 高阶价值 |
|---|---|---|
| 身份治理 | 租户、用户、角色、菜单、按钮多层控制 | 防止跨租户、跨场站越权 |
| 数据治理 | 租户与场站两级数据收窄 | 一套页面服务三类角色 |
| 业务留痕 | 创建人/更新人与逻辑删除贯穿业务表 | 结算争议可复核 |
| 操作审计 | 登录日志与操作日志统一归档 | 满足企业内部合规要求 |
| 权限细分 | 申报、下发、结算、打款独立授权 | 高危动作专人负责 |
风控亮点
平台把“能不能看”和“能不能操作”拆开治理:查看事件与曲线只需要数据范围,确认申报、下发分配、确认结算还必须持有独立按钮权限。收益相关数字全部由服务端计算并落库留痕,前端无法直接改写结算金额。所有敏感操作进入操作日志,确保平台可用于真实的多运营商托管场景。
