Files
danyang-match/运营管理后台与组织权限体系详细设计.md
T

3208 lines
39 KiB
Markdown
Raw Permalink 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.
# 丹阳公益婚恋服务平台
# V1.0 运营管理后台与组织权限体系详细设计
版本:V1.0
适用范围:平台管理员、妇联、工会、公益服务中心、公益红娘、审核员、活动管理员、风控员、志愿者
核心目标:统一后台、统一账号、按角色授权、按组织隔离、敏感权限最小化、关键操作可审计
---
# 第一章 设计目标
V1.0后台不是单纯的数据管理工具。
它必须同时承担:
- 用户管理
- 资料审核
- 匹配规则管理
- 公益红娘管理
- 活动管理
- 举报风控
- 组织管理
- 工作人员管理
- 权限管理
- 数据统计
- 安全审计
后台设计必须解决以下核心问题:
1. 谁可以登录
2. 谁可以看到哪些菜单
3. 谁可以看到哪些用户
4. 谁可以处理哪些任务
5. 谁可以查看敏感信息
6. 不同组织之间如何隔离
7. 多角色人员如何授权
8. 工作人员离职如何立即失效
9. 重大操作如何审计
10. 如何避免“一个管理员什么都能看”
核心原则:
> **一个后台,一套账号,多角色、多权限、多组织数据范围。**
---
# 第二章 V1后台总体架构建议
推荐:
> **公益红娘工作台、运营管理后台、平台管理后台使用同一个响应式Web应用。**
通过:
```text
账号
+
角色
+
权限
+
数据范围
```
决定用户看到什么。
而不是开发三套完全独立后台。
---
# 第三章 为什么推荐统一后台
统一后台可以减少:
- 三套登录
- 三套用户体系
- 三套权限代码
- 三套组件
- 三套部署
- 三套维护
技术上统一。
业务上:
> 不同角色看到不同工作界面。
---
# 第四章 后台入口
统一:
```text
/admin
```
或正式域名:
```text
https://admin.example.com
```
登录后根据权限进入对应首页。
---
# 第五章 Operator统一账号模型
所有工作人员统一:
```text
operators
```
包括:
- 平台管理员
- 机构管理员
- 审核员
- 公益红娘
- 活动管理员
- 风控员
- 志愿者
不要为红娘、管理员、志愿者分别做独立账号表。
---
# 第六章 Operator基本属性
至少包含:
```text
operatorId
name
organizationId
status
roles
permissions
lastLoginAt
```
---
# 第七章 OperatorStatus
建议:
```text
active
disabled
locked
expired
```
含义:
### active
正常。
### disabled
人工停用。
### locked
安全锁定。
### expired
临时账号已到期。
---
# 第八章 一个Operator可以拥有多个角色
例如:
某公益服务中心负责人:
```text
organization_admin
+
activity_manager
```
某工作人员:
```text
matchmaker
+
activity_manager
```
允许。
但权限最终取:
> 已授权角色的权限合集 + 数据范围限制。
---
# 第九章 角色与权限必须分离
角色:
```text
matchmaker
```
是一组权限模板。
权限:
```text
matchmaker.service.view
```
才是真正的操作能力。
不要在代码里写:
```text
if role == matchmaker
```
决定所有行为。
---
# 第十章 V1默认角色
建议:
```text
super_admin
platform_admin
organization_admin
reviewer
matchmaker
activity_manager
risk_operator
volunteer
data_viewer
```
---
# 第十一章 super_admin
定位:
> 平台最高技术/系统管理权限。
权限包括:
- 系统配置
- 组织管理
- 权限管理
- 高级安全管理
不建议日常运营人员使用此账号。
---
# 第十二章 platform_admin
负责平台日常运营。
可管理:
- 用户
- 审核
- 红娘
- 活动
- 风控
- 统计
但是否有:
> 完整身份证查看
仍应单独授权。
---
# 第十三章 organization_admin
负责某一个参与组织。
例如:
- 妇联
- 工会
- 公益服务中心
只能管理:
> 本组织授权范围内的数据和工作人员。
---
# 第十四章 reviewer
负责:
> 用户资料审核。
可以:
- 查看审核资料
- 领取审核
- 通过
- 退回
- 拒绝
不能:
- 修改平台权限
- 查看聊天
- 任意封禁用户
- 管理其他机构
---
# 第十五章 matchmaker
负责:
- 红娘服务
- 查看服务用户必要资料
- 系统候选
- 人工推荐
- 跟进
- 活动推荐
不能:
- 查看身份证
- 查看聊天
- 直接封禁
- 修改匹配算法
- 管理权限
---
# 第十六章 activity_manager
负责:
- 创建活动
- 编辑活动
- 报名审核
- 签到管理
- 活动统计
- 现场异常上报
不能:
- 查看聊天
- 查看身份证
- 修改用户匹配关系
- 修改平台权限
---
# 第十七章 risk_operator
负责:
- 举报
- 风险事件
- 用户风险分析
- 风控处置
- 申诉处理
根据权限可以:
- 限制
- 暂停
- 封禁
敏感聊天访问:
> 仍应独立权限控制。
---
# 第十八章 volunteer
最低权限角色。
用于:
- 活动签到
- 简单现场辅助
只应看到:
> 当前活动必要信息。
---
# 第十九章 data_viewer
用于:
> 只读统计。
例如机构负责人只看运营数据。
不能:
- 修改用户
- 审核
- 封禁
- 查看敏感资料
---
# 第二十章 权限模型
建议采用:
```text
RBAC
+
Data Scope
+
Sensitive Permission
```
三层。
---
# 第二十一章 第一层:RBAC
决定:
> 能不能做某类操作。
例如:
```text
activity.create
```
---
# 第二十二章 第二层:Data Scope
决定:
> 可以对哪些数据做。
例如同样拥有:
```text
activity.view
```
平台管理员:
> 全平台。
机构管理员:
> 本机构。
---
# 第二十三章 第三层:Sensitive Permission
决定:
> 是否允许查看高敏感字段。
例如:
```text
user.sensitive.identity.view
```
必须单独授权。
---
# 第二十四章 数据范围枚举
建议:
```text
platform
organization
assigned
self
activity_scope
```
---
# 第二十五章 platform范围
可以访问:
> 全平台符合权限的资源。
主要:
- super_admin
- platform_admin
- 特定risk_operator
---
# 第二十六章 organization范围
只能访问:
```text
resource.organization_id = operator.organization_id
```
---
# 第二十七章 assigned范围
只访问:
> 明确分配给自己的任务。
例如红娘:
```text
service.assigned_operator_id = currentOperator
```
---
# 第二十八章 self范围
只管理:
> 自己账号相关数据。
---
# 第二十九章 activity_scope
用于临时工作人员。
例如:
志愿者账号只允许:
```text
activity_id IN operator_activity_assignments
```
---
# 第三十章 Data Scope不能靠前端实现
错误:
前端不显示其他组织。
正确:
服务端SQL/Service就必须加范围。
否则用户手工改URL仍可能访问。
---
# 第三十一章 组织模型
组织表:
```text
organizations
```
类型:
```text
platform
women_federation
trade_union
charity_center
volunteer_team
civil_affairs_partner
other
```
---
# 第三十二章 组织层级
V1建议:
> 最多支持简单父子组织。
例如:
```text
平台运营主体
│
├── 妇联
├── 工会
└── 公益服务中心
```
不建设复杂无限级政府组织树。
---
# 第三十三章 organization字段建议
```text
id
parent_id
name
type
status
contact
created_at
```
---
# 第三十四章 OrganizationStatus
```text
active
disabled
```
disabled后:
- 组织人员不能继续新业务
- 现有服务进入转交
- 数据不删除
---
# 第三十五章 跨组织用户数据问题
用户属于:
> 平台用户。
而不是天然属于某个妇联/工会。
因此:
> 不建议给User加唯一organization_owner。
---
# 第三十六章 组织和用户的关系
应该通过:
- MatchmakerService
- ActivityRegistration
- ReviewTask分配
- Organization授权
建立业务关系。
而不是:
```text
user.organization_id
```
直接把用户“归属”某组织。
---
# 第三十七章 为什么用户不应归属组织
一个用户可能:
- 参加工会活动
- 接受公益服务中心红娘帮助
- 被平台统一审核
因此用户是:
> 平台主体数据。
组织只有:
> 特定服务访问权。
---
# 第三十八章 后台一级菜单
统一建议:
```text
工作台
用户管理
资料审核
匹配管理
公益红娘
活动管理
举报风控
数据统计
组织人员
权限管理
系统设置
审计日志
```
---
# 第三十九章 菜单动态生成
根据:
```text
currentOperator.permissions
```
动态显示。
没有:
```text
risk.report.view
```
就不显示:
> 举报风控。
---
# 第四十章 工作台按角色变化
同一个:
```text
/dashboard
```
根据角色显示不同卡片。
---
# 第四十一章 Reviewer工作台
显示:
```text
待审核
已领取
今日已完成
退回待复审
```
---
# 第四十二章 Matchmaker工作台
显示:
```text
新服务
待首次处理
今日待跟进
等待用户
服务中
```
---
# 第四十三章 Activity Manager工作台
显示:
```text
报名中活动
待审核报名
今日活动
待签到
近期活动
```
---
# 第四十四章 Risk Operator工作台
显示:
```text
高风险举报
待处理举报
风险用户
待处理申诉
```
---
# 第四十五章 Platform Admin工作台
显示:
```text
待审核资料
待处理举报
红娘待分配
活动报名待审核
异常账号
```
不做炫酷大屏。
---
# 第四十六章 用户管理模块权限
建议:
```text
user.list.view
user.detail.view
user.status.change
user.sensitive.view
user.relationship.summary.view
user.activity.summary.view
user.matchmaker.summary.view
```
---
# 第四十七章 用户列表默认字段
显示:
```text
用户ID
展示名
性别
年龄
区域
实名认证
资料审核
婚恋状态
账号状态
注册时间
```
不显示:
- 完整手机号
- 身份证
- 聊天
- 举报详情
---
# 第四十八章 用户列表搜索
支持:
```text
用户ID
展示名
脱敏手机号/授权手机号搜索
```
手机号搜索:
> 仅授权人员。
---
# 第四十九章 用户详情Tab
建议:
```text
基础信息
婚恋资料
审核记录
匹配摘要
活动摘要
红娘服务
账号状态
```
风险信息:
> 有权限才出现。
---
# 第五十章 用户详情不展示完整聊天
明确禁止普通用户管理页面加:
> 聊天记录Tab。
聊天只能在风控案件场景下按权限访问。
---
# 第五十一章 敏感身份入口
独立:
```text
查看实名信息
```
点击:
> 权限校验 + 访问原因 + 审计。
---
# 第五十二章 默认脱敏
显示:
```text
姓名:张**
身份证:320***********1234
手机号:138****1234
```
---
# 第五十三章 查看完整身份
只有:
```text
user.sensitive.identity.full
```
权限允许。
V1建议极少授权。
---
# 第五十四章 资料审核菜单
权限:
```text
review.list.view
review.claim
review.process
review.reject
review.history.view
```
---
# 第五十五章 Reviewer只能处理审核
不能因为能看审核页:
> 就拥有user.status.change。
---
# 第五十六章 审核任务数据范围
平台统一审核时:
```text
platform
```
如果未来机构自行审核:
可以按:
> assigned / organization
控制。
V1建议核心实名资料审核由平台统一标准管理。
---
# 第五十七章 匹配管理菜单
权限:
```text
match.stats.view
match.list.view
match.rule.view
match.rule.manage
match.rule.activate
```
---
# 第五十八章 普通管理员不需要看所有用户匹配详情
匹配详情属于较高隐私业务数据。
默认后台重点看:
- 聚合统计
- 规则
- 异常
不是:
> 谁喜欢了谁的全部流水。
---
# 第五十九章 查看特定Match
只在:
- 用户投诉
- 风控
- 服务处理
等必要场景开放。
---
# 第六十章 Match Rule权限
只有少数平台角色:
```text
match.rule.manage
```
可以修改。
机构管理员不能修改全局算法。
---
# 第六十一章 公益红娘模块权限
```text
matchmaker.service.list
matchmaker.service.view
matchmaker.service.assign
matchmaker.service.claim
matchmaker.service.followup
matchmaker.candidate.view
matchmaker.recommend
matchmaker.service.complete
```
---
# 第六十二章 红娘管理员
organization_admin若负责红娘:
可以:
- 看本机构服务
- 分配本机构红娘
- 看工作量
不能:
> 看其他机构服务。
---
# 第六十三章 活动管理权限
```text
activity.list
activity.view
activity.create
activity.edit
activity.publish
activity.cancel
activity.registration.view
activity.registration.review
activity.checkin
activity.feedback.view
activity.stats.view
```
---
# 第六十四章 发布和编辑分离
可以允许工作人员:
> 创建活动草稿。
但只有负责人:
```text
activity.publish
```
可以正式发布。
降低误操作风险。
---
# 第六十五章 取消活动属于高风险权限
```text
activity.cancel
```
必须:
- 二次确认
- 原因
- 审计
---
# 第六十六章 志愿者只给
```text
activity.checkin
```
和必要:
```text
activity.registration.basic_view
```
即可。
---
# 第六十七章 举报风控权限
建议细拆:
```text
risk.report.list
risk.report.view
risk.report.process
risk.user.view
risk.user.warning
risk.user.limit
risk.user.suspend
risk.user.ban
risk.appeal.view
risk.appeal.process
risk.evidence.view
message.content.review
```
---
# 第六十八章 为什么风控要细拆
“查看举报”和“永久封禁”不是一个风险等级。
例如初级风控员:
可以:
- 查看
- 处理普通举报
但不一定拥有:
> ban。
---
# 第六十九章 用户封禁建议双重保护
V1建议:
永久ban操作:
- 二次确认
- 填写原因
- Audit
是否需要双人复核:
> 初期可作为P1建议。
严重高风险时至少由高权限角色操作。
---
# 第七十章 聊天查看权限单独存在
```text
message.content.review
```
不能因为:
```text
risk.report.process
```
就自动获得全部聊天读取。
---
# 第七十一章 风控聊天读取必须案件关联
正确:
```text
Report
↓
Conversation Context
```
错误:
```text
用户详情
↓
所有聊天
```
---
# 第七十二章 组织人员菜单
权限:
```text
organization.list
organization.view
organization.create
organization.edit
operator.list
operator.create
operator.edit
operator.disable
operator.role.assign
```
---
# 第七十三章 organization_admin人员权限
只能管理:
```text
operators.organization_id = currentOrg
```
不能新增平台管理员。
---
# 第七十四章 机构管理员不能给自己越权
例如本机构最大允许:
```text
matchmaker
activity_manager
volunteer
```
机构管理员不能通过角色接口:
> 给自己super_admin。
服务端需要:
> Role Assignment Boundary。
---
# 第七十五章 角色分配边界
每个管理角色定义:
```text
assignable_roles
```
例如:
organization_admin可分配:
```text
matchmaker
activity_manager
volunteer
data_viewer
```
不能分:
```text
platform_admin
super_admin
```
---
# 第七十六章 权限管理菜单
只对:
```text
permission.manage
```
开放。
建议V1只有:
- super_admin
- 指定platform_admin
拥有。
---
# 第七十七章 系统角色
默认角色:
```text
system_role = true
```
不允许删除。
可以:
> 克隆后创建自定义角色。
---
# 第七十八章 自定义角色
例如:
```text
工会活动负责人
```
可以从:
```text
activity_manager
```
复制后精简权限。
---
# 第七十九章 不建议V1做复杂ABAC
不要建设:
- 表达式权限引擎
- 策略语言
- 动态属性规则系统
RBAC + 数据范围足够。
---
# 第八十章 权限命名规范
统一:
```text
module.resource.action
```
例如:
```text
user.detail.view
activity.registration.review
risk.user.ban
match.rule.manage
```
---
# 第八十一章 权限不能按按钮命名
错误:
```text
button_123
```
正确:
> 表达业务能力。
---
# 第八十二章 权限后端统一注解/中间件
例如:
```text
@RequirePermission("activity.publish")
```
或框架对应机制。
避免Controller手写大量:
```text
if role...
```
---
# 第八十三章 数据范围服务
建议独立:
```text
DataScopeService
```
输入:
```text
operator
resourceType
```
输出可访问条件。
---
# 第八十四章 示例:红娘服务查询
红娘:
```text
assigned_operator_id = me
```
机构管理员:
```text
organization_id = myOrg
```
平台管理员:
> 无组织限制。
---
# 第八十五章 示例:活动列表
志愿者:
> 只看被分配活动。
活动管理员:
> 本组织活动。
平台管理员:
> 全部。
---
# 第八十六章 用户数据访问不能简单按机构过滤
再次强调:
用户是平台用户。
机构只能通过:
> 具体服务关系
获取必要资料。
---
# 第八十七章 OrganizationAccessGrant建议
为未来跨组织协作,可预留:
```text
organization_access_grants
```
但V1如果业务简单:
> 暂不必建复杂授权表。
先通过业务对象关联授权。
---
# 第八十八章 用户与红娘的数据范围
红娘可看用户完整Matchmaker DTO的前提:
```text
存在有效service
AND
service.assigned_operator = currentOperator
```
---
# 第八十九章 用户与活动管理员的数据范围
活动管理员可看报名必要资料的前提:
```text
user registered activity
AND
activity belongs to currentOrg / authorized
```
---
# 第九十章 用户与审核员的数据范围
审核员可以看:
> 当前审核任务必要资料。
不能因此浏览用户全部红娘、活动、聊天历史。
---
# 第九十一章 用户与风控员的数据范围
风控员基于:
- Report
- RiskEvent
- Appeal
访问必要资料。
---
# 第九十二章 Data Minimization必须在后台体现
不是只有用户端隐私。
后台也应做到:
> 每个角色只看完成任务所需要的信息。
---
# 第九十三章 后台顶部Header
显示:
```text
当前组织
当前用户
通知
退出
```
不需要:
- 天气
- 时间大屏
- 欢迎词大Banner
---
# 第九十四章 Sidebar
宽度:
```text
220~240px
```
折叠:
> 可选。
桌面V1优先1280+。
---
# 第九十五章 后台页面统一结构
```text
PageHeader
↓
FilterBar
↓
Content
↓
Pagination
```
---
# 第九十六章 表格原则
默认:
```text
20条/页
```
可选择:
```text
20
50
```
100可作为技术支持但不必前台突出。
该分页属于UX配置,不是业务硬规则。
---
# 第九十七章 表格操作
每行最多:
```text
查看
处理
更多
```
不要一行放8个按钮。
---
# 第九十八章 高风险按钮
例如:
```text
封禁
取消活动
停用工作人员
```
放:
> 更多
或详情页。
并二次确认。
---
# 第九十九章 后台状态色
统一使用:
- 正常:绿色
- 待处理:橙色
- 风险:红色
- 普通:蓝/灰
不能所有异常都一片大红。
---
# 第一百章 数据统计模块权限
```text
analytics.overview.view
analytics.user.view
analytics.match.view
analytics.activity.view
analytics.matchmaker.view
analytics.risk.view
```
---
# 第一百零一章 机构统计范围
机构管理员只能看:
> 本机构参与产生的运营数据。
例如:
- 本机构活动
- 本机构红娘服务
不能看全平台完整用户数据。
---
# 第一百零二章 平台统计
platform_admin可看:
- 用户
- 匹配
- 活动
- 红娘
- 风控
全平台汇总。
---
# 第一百零三章 数据导出权限
建议:
```text
data.export
```
单独权限。
不要:
> 能看列表就能导出。
---
# 第一百零四章 为什么导出单独授权
Web页面:
> 有访问控制。
Excel下载后:
> 很难继续控制传播。
因此导出风险更高。
---
# 第一百零五章 V1限制导出范围
优先支持:
- 活动执行脱敏名单
- 必要运营统计
不提供:
> 全量用户数据库导出。
---
# 第一百零六章 导出内容必须脱敏
例如活动:
```text
活动编号
展示名
手机号后四位
报名状态
签到状态
```
---
# 第一百零七章 导出审计
记录:
```text
operator
export_type
filters
row_count
time
```
敏感导出建议:
> 水印。
---
# 第一百零八章 Audit模块菜单
权限:
```text
audit.view
audit.sensitive.view
audit.export
```
---
# 第一百零九章 普通管理员是否看Audit
可以看:
> 自己组织的普通操作日志。
高敏感日志:
> 平台安全角色。
---
# 第一百一十章 Audit记录操作
至少:
```text
登录
审核
用户状态修改
红娘分配
活动发布/取消
举报处理
风控处置
权限变更
工作人员创建/停用
敏感数据访问
系统配置修改
```
---
# 第一百一十一章 Audit不可由普通后台删除
审计日志:
> 不提供删除按钮。
---
# 第一百一十二章 SensitiveAccessLog
与普通Audit分开。
记录:
```text
谁
查看谁
什么敏感数据
为什么
什么时候
```
---
# 第一百一十三章 敏感访问理由
可使用标准:
```text
身份异常核验
举报调查
申诉处理
依法配合
其他
```
其他需要填写说明。
---
# 第一百一十四章 工作人员登录安全
V1至少:
```text
账号+密码
强密码
登录限频
失败锁定
Session超时
停用实时失效
```
---
# 第一百一十五章 MFA
建议优先给:
```text
super_admin
platform_admin
risk_operator(高权限)
```
启用。
如果V1研发周期紧:
> P1。
但架构预留。
---
# 第一百一十六章 Session有效期
工作人员后台建议:
> 比普通小程序更严格。
例如:
```text
空闲一定时间重新认证
```
具体时长待安全配置确定。
不要在业务代码写死。
---
# 第一百一十七章 高敏感操作再认证
P1可考虑:
> 查看完整身份证 / 修改权限 / 永久封禁
要求再次输入密码或MFA。
---
# 第一百一十八章 临时志愿者账号
支持:
```text
expires_at
```
活动结束后:
> 自动expired。
---
# 第一百一十九章 离职流程
工作人员离职:
```text
operator.status = disabled
↓
撤销所有Session
↓
停止API权限
↓
转交服务
↓
审计
```
---
# 第一百二十章 红娘离职服务转交
系统提示:
> 当前仍有18个未完成服务。
必须先:
- 批量重新分配
- 或管理员接管
不能只停账号。
---
# 第一百二十一章 机构人员停用
机构管理员可以停:
> 本机构普通人员。
不能停:
> 平台管理员。
---
# 第一百二十二章 平台管理员停用机构管理员
平台权限允许。
停用后:
> 该组织需重新指定负责人。
---
# 第一百二十三章 后台通知中心
工作人员通知:
```text
新审核任务
新举报
红娘任务分配
活动报名待审核
用户风险变化
权限/账号安全
```
---
# 第一百二十四章 通知按职责发送
不要:
> 每个管理员都收到所有消息。
例如:
活动报名:
> 活动管理员。
举报:
> 风控员。
审核:
> 审核员。
---
# 第一百二十五章 工作人员个人待办
建议:
```text
GET /operator/tasks
```
统一返回:
```text
review
matchmaker
activity
risk
```
属于自己的待办。
---
# 第一百二十六章 是否建设通用工单系统
V1不需要。
各业务有自己的Task实体。
Dashboard统一聚合即可。
---
# 第一百二十七章 平台超级管理员红线
即使是super_admin:
> 也不应该默认在普通页面看全部私人聊天。
技术超级权限:
≠
日常业务合理权限。
---
# 第一百二十八章 Break Glass机制建议
未来针对极特殊安全事件,可以有:
> 紧急访问。
例如高级安全负责人临时访问某敏感数据。
必须:
- 填写原因
- 强审计
- 可复核
V1可先预留理念,不一定做复杂系统。
---
# 第一百二十九章 系统设置权限
```text
system.config.view
system.config.manage
```
可配置:
- 推荐数量
- 活动功能开关
- 红娘功能开关
- 图片上限
- 风控基础配置
---
# 第一百三十章 不允许普通运营修改技术Secret
后台系统设置不要暴露:
- 数据库密码
- 微信Secret
- JWT Secret
- 云密钥
这些属于部署Secret。
不是运营配置。
---
# 第一百三十一章 Feature Flag
后台可见:
```text
活动服务
红娘服务
图片聊天
```
等业务开关。
---
# 第一百三十二章 系统维护模式
只有高权限人员:
```text
system.maintenance.manage
```
可开启。
开启:
> 用户端进入维护页。
必须二次确认。
---
# 第一百三十三章 用户账号状态修改
普通后台不能随意:
```text
normal → banned
```
必须走:
> RiskAction。
用户管理页可以提供:
> 查看状态
但封禁动作进入风控流程。
---
# 第一百三十四章 为什么不能User页面直接改状态
这样能保证:
- 有原因
- 有风控记录
- 可申诉
- 可审计
不会出现管理员随手改数据库状态。
---
# 第一百三十五章 用户资料人工修改
V1后台原则:
> 工作人员不直接替用户修改婚恋资料。
审核员只能:
- 通过
- 退回
用户本人修改。
---
# 第一百三十六章 特殊代录场景
如果未来服务老年/特殊用户需要工作人员代录:
必须独立:
> Assisted Entry流程。
V1普通后台不提供。
---
# 第一百三十七章 系统内部用户备注
是否允许管理员随意写“内部备注”?
建议非常谨慎。
只允许业务模块已有:
- 审核备注
- 红娘跟进
- 风控记录
- 活动异常
不要增加一个:
> 所有人都能写的“用户备注”。
容易形成不当标签。
---
# 第一百三十八章 组织权限矩阵概览
| 功能 | 平台管理员 | 机构管理员 | 审核员 | 红娘 | 活动管理员 | 风控员 | 志愿者 |
|---|---:|---:|---:|---:|---:|---:|---:|
| 用户基本列表 | 是 | 有限 | 审核相关 | 服务相关 | 报名相关 | 风控相关 | 否 |
| 实名敏感信息 | 单独权限 | 否 | 必要脱敏 | 否 | 否 | 单独权限 | 否 |
| 资料审核 | 可 | 按授权 | 是 | 否 | 否 | 否 | 否 |
| 红娘服务 | 管理 | 本机构 | 否 | 是 | 否 | 必要摘要 | 否 |
| 活动管理 | 管理 | 本机构 | 否 | 推荐活动 | 是 | 必要摘要 | 签到 |
| 举报风控 | 管理 | 默认否 | 否 | 转交 | 转交 | 是 | 转交 |
| 聊天正文 | 默认否 | 否 | 否 | 否 | 否 | 案件授权 | 否 |
| 权限管理 | 指定 | 有限 | 否 | 否 | 否 | 否 | 否 |
| 统计 | 全平台 | 本机构 | 自身工作 | 自身服务 | 本机构活动 | 风控 | 否 |
---
# 第一百三十九章 机构管理员的数据范围
核心:
> 本组织产生/被授权处理的业务。
例如:
```text
本机构活动
本机构红娘服务
本机构工作人员
```
不自动获得:
> 全平台婚恋用户库。
---
# 第一百四十章 平台管理员的数据范围
平台管理需要全局运营能力。
但敏感字段仍:
> 单独权限。
---
# 第一百四十一章 审核员的数据范围
审核任务。
不是:
> 全平台自由搜索用户。
---
# 第一百四十二章 风控员的数据范围
风险案件。
可以根据案件扩大必要上下文。
但每一步仍遵守:
> 最小必要。
---
# 第一百四十三章 跨机构红娘服务
如果用户申请平台统一红娘服务:
管理员可把Service分配给某合作机构。
此时:
> 该机构只获得该Service必要的数据访问。
---
# 第一百四十四章 Service结束后访问权限
服务完成后:
红娘是否无限期继续查看用户?
建议:
> 不应。
完成后保留服务历史摘要,但对完整婚恋资料的实时访问应按业务需要收缩。
V1可以先做到:
> 已完成服务只读。
未来再进一步做访问期限。
---
# 第一百四十五章 活动结束后志愿者权限
活动结束:
> 临时账号过期。
不能继续查看历史报名名单。
---
# 第一百四十六章 数据访问期限思想
权限不仅是:
> “有没有”。
未来还应考虑:
> “什么时候还有”。
V1重点先覆盖临时活动账号。
---
# 第一百四十七章 后台列表URL状态
筛选写Query:
```text
/reviews?status=pending&page=2
```
便于刷新恢复。
---
# 第一百四十八章 详情页必须URL可恢复
例如:
```text
/admin/users/{id}
/admin/reviews/{id}
/admin/reports/{id}
```
刷新后重新请求。
不能靠上一页传对象。
---
# 第一百四十九章 后台401
Session过期:
> 回登录。
如果页面有未保存表单:
优先保存非敏感草稿或提示。
---
# 第一百五十章 后台403
显示:
> 你没有访问该功能的权限。
不要:
> 白屏。
---
# 第一百五十一章 数据范围403
例如机构管理员手改其他组织activityId:
返回:
```text
ORGANIZATION_SCOPE_DENIED
```
---
# 第一百五十二章 敏感权限403
返回:
```text
SENSITIVE_ACCESS_DENIED
```
---
# 第一百五十三章 Operator账号异常
disabled:
> 当前账号已停用,请联系管理员。
locked:
> 当前账号因安全原因暂时锁定。
---
# 第一百五十四章 机构停用
组织被停用:
其Operator不能继续普通业务。
服务端登录/请求检查:
```text
organization.status
```
---
# 第一百五十五章 组织停用后的在途任务
管理员必须处理:
- 红娘服务转交
- 活动负责人调整
- 未完成工作
不能直接删除组织。
---
# 第一百五十六章 组织删除原则
不物理删除已有业务组织。
采用:
```text
disabled
```
历史Audit和活动仍能关联。
---
# 第一百五十七章 角色删除原则
系统角色:
> 不删除。
自定义角色如果已有人使用:
> 先解除关联或禁用。
建议roles增加:
```text
status
```
---
# 第一百五十八章 权限变更实时生效
管理员撤销某Operator:
```text
risk.user.ban
```
下一次请求:
> 立即不能使用。
不要等重新登录。
---
# 第一百五十九章 权限缓存
可以Redis缓存:
```text
operator_permissions:{id}
```
权限修改后:
> 立即失效。
---
# 第一百六十章 Session与权限分离
Token不建议把全部权限永久写死到长周期JWT中。
否则权限改了:
> 老Token还有效。
可:
- 短Token
- 权限版本
- Redis Session
确保及时生效。
---
# 第一百六十一章 Operator权限版本
可增加:
```text
permission_version
```
角色变化:
```text
version +1
```
Token/Session发现版本不一致:
> 重新加载权限。
---
# 第一百六十二章 登录日志
建议:
```text
operator_login_logs
```
记录:
- operator
- IP
- User Agent
- 成功/失败
- 时间
也可纳入Security Log。
---
# 第一百六十三章 异常登录提醒
P1:
如果:
- 新设备
- 异常IP
- 短时间多次失败
提醒管理员或本人。
---
# 第一百六十四章 Admin Header当前组织切换
如果某平台工作人员被授权多个组织:
可以:
> 切换工作上下文。
普通机构人员:
> 固定组织。
V1如无多组织Operator需求,可暂不做切换。
---
# 第一百六十五章 组织切换不能改变实际权限
切换只是:
> 数据上下文。
不能通过切组织获得未授权范围。
---
# 第一百六十六章 后台搜索全局能力
不建议做一个:
> 全局搜人/手机号/聊天/举报
超级搜索。
风险太高。
各业务模块:
> 在本模块内搜索。
---
# 第一百六十七章 用户搜索手机号
只有特定权限:
```text
user.phone.search
```
才能使用。
返回结果仍脱敏。
---
# 第一百六十八章 身份证搜索
V1原则:
> 普通后台不提供。
确因实名认证异常需要:
使用Identity模块受控查询。
---
# 第一百六十九章 统计匿名化
统计页尽量用:
> 聚合数据。
不需要显示具体用户。
---
# 第一百七十章 小样本隐私
如果某机构某条件只有1人:
后台统计也应避免为了图表直接暴露个体敏感信息。
V1可以先不做过细交叉分析。
---
# 第一百七十一章 后台批量操作
V1只谨慎支持:
- 批量活动报名审核(建议后期)
- 批量任务分配
不支持:
> 批量封禁用户
作为普通功能。
---
# 第一百七十二章 批量敏感操作风险
任何批量状态变化:
必须:
- 预览
- 二次确认
- Audit
---
# 第一百七十三章 用户封禁不支持普通批量
除非技术攻击场景由安全系统处理。
人工运营不需要:
> 选100人一键封禁。
---
# 第一百七十四章 后台操作Undo
高风险操作不要依赖:
> Toast后5秒撤销。
应该通过正式:
- revoke
- appeal
- restore
流程。
---
# 第一百七十五章 资料审核支持快捷操作
可以:
```text
通过
需修改
```
降低工作人员操作量。
严重拒绝:
放“更多”。
---
# 第一百七十六章 审核原因标准化
使用:
> review_reasons字典。
减少审核员每次自由发挥。
可以补充:
> 备注。
---
# 第一百七十七章 风控原因标准化
同样使用:
> resultCode / actionType。
便于统计和复核。
---
# 第一百七十八章 权限变更审计样例
例如:
```text
2026-08-28 14:32
管理员:李某
操作:修改张某角色
原角色:matchmaker
新角色:matchmaker + activity_manager
```
---
# 第一百七十九章 敏感访问审计样例
```text
2026-08-28 15:10
操作员:王某
查看:USR-xxx 实名信息
原因:身份异常核验
```
---
# 第一百八十章 后台权限测试矩阵
每个API至少测试:
```text
无Token
普通用户Token
错误Operator角色
正确角色错误组织
正确角色正确组织
敏感权限缺失
账号disabled
```
---
# 第一百八十一章 重点越权测试一
红娘手工请求:
```text
GET /admin/users/{id}/sensitive-identity
```
结果:
> 403。
---
# 第一百八十二章 重点越权测试二
志愿者请求:
```text
GET /admin/activities/other-activity/registrations
```
非授权活动:
> 403。
---
# 第一百八十三章 重点越权测试三
机构管理员请求:
> 其他机构红娘服务。
结果:
> ORGANIZATION_SCOPE_DENIED。
---
# 第一百八十四章 重点越权测试四
审核员请求:
```text
POST /admin/risk/users/{id}/actions
```
结果:
> PERMISSION_DENIED。
---
# 第一百八十五章 重点越权测试五
风控员无:
```text
message.content.review
```
访问聊天:
> 403。
---
# 第一百八十六章 重点越权测试六
机构管理员给自己分配:
```text
super_admin
```
必须:
> 拒绝。
---
# 第一百八十七章 重点实时权限测试
管理员把红娘账号disabled。
该红娘即使页面没刷新:
下一次API:
> ACCOUNT_DISABLED。
Session失效。
---
# 第一百八十八章 后台数据审计验收
必须能回答:
```text
谁审核了这个用户?
谁封禁了这个账号?
谁取消了这场活动?
谁看过这个用户的敏感身份?
谁给这个工作人员加了权限?
```
如果回答不了:
> 审计设计不合格。
---
# 第一百八十九章 后台UX验收
工作人员登录后5秒内应该知道:
> 今天有什么需要处理。
审核员不需要在:
> 用户管理 → 搜索 → 打开 → 找审核
才能工作。
直接:
> 工作台 → 待审核。
---
# 第一百九十章 后台安全UX原则
安全不能完全依赖培训。
界面本身必须减少错误:
- 危险按钮不突出
- 高风险操作二次确认
- 敏感字段默认脱敏
- 无权限入口不显示
- 数据范围自动限制
---
# 第一百九十一章 后台P0模块
```text
统一登录
Dashboard
用户管理
资料审核
红娘服务
活动管理
举报风控
组织人员
RBAC
审计
```
---
# 第一百九十二章 P1模块
```text
高级统计
敏感动态水印
MFA
临时活动账号
登录异常提醒
细化数据导出
权限复核
```
---
# 第一百九十三章 P2模块
```text
跨机构高级协同
审批式权限申请
Break Glass
自动权限到期
更高级合规审计
```
---
# 第一百九十四章 推荐后台代码模块
```text
admin/
auth/
dashboard/
users/
reviews/
matches/
matchmaker/
activities/
risk/
analytics/
organizations/
operators/
roles/
permissions/
audit/
configs/
```
---
# 第一百九十五章 后端权限模块建议
```text
OperatorAuthService
PermissionService
RoleService
DataScopeService
OrganizationService
SensitiveAccessService
AuditService
```
---
# 第一百九十六章 权限判断标准流程
```text
请求
↓
Operator认证
↓
账号是否active
↓
Organization是否active
↓
是否拥有permission
↓
DataScope是否允许resource
↓
是否涉及sensitive permission
↓
允许业务Service执行
↓
必要时Audit
```
---
# 第一百九十七章 后台设计最终红线
严禁:
1. 所有工作人员共用一个admin账号
2. 红娘拥有全部用户资料权限
3. 普通管理员能浏览私人聊天
4. 志愿者看到身份证
5. 机构管理员看到其他机构全部数据
6. 前端隐藏按钮代替后端权限
7. 可以随意导出全量用户
8. 权限修改没有审计
9. 离职人员账号继续可用
10. 用户封禁可以无原因直接修改数据库状态
---
# 第一百九十八章 最终组织模型
```text
平台运营主体
│
┌─────────────┼─────────────┐
│ │ │
妇联 工会 公益服务中心
│ │ │
┌────┴───┐ ┌───┴───┐ ┌───┴────┐
│ │ │ │ │ │
活动管理员 红娘 活动人员 负责人 红娘 志愿者
平台层:
审核员
风控员
平台管理员
```
具体实际组织结构可调整,但权限模型保持一致。
---
# 第一百九十九章 最终权限模型
```text
Operator
│
├── Organization
│
├── Roles
│ ↓
│ Permissions
│
├── Data Scope
│
└── Sensitive Permissions
↓
Audit Log
```
---
# 第二百章 最终设计原则
整个运营管理后台必须坚持:
> **后台统一,权限分开。**
> **用户属于平台,不属于某个工作人员或某个组织的私人资源。**
> **角色决定能做什么,数据范围决定能对谁做。**
> **敏感信息永远需要额外权限。**
> **红娘、审核员、活动人员、风控员职责必须分离。**
> **志愿者始终使用最低权限。**
> **机构合作不等于数据全共享。**
> **工作人员离职,权限必须立即消失。**
> **任何高风险操作必须可追溯。**
> **任何权限设计都必须同时在服务端执行,不能只靠前端隐藏。**
最终后台不是为了让管理员“什么都能看到”,而是为了做到:
> **每个人只看到完成自己工作所需要的内容,只能做自己被授权做的事情,而且做过的关键事情都能被追溯。**
这才是公益婚恋平台能够由多个组织、多个工作人员长期共同运营,而不会随着人员增加逐渐失控的基础。