# 丹阳公益婚恋服务平台 # 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 ``` --- # 第二百章 最终设计原则 整个运营管理后台必须坚持: > **后台统一,权限分开。** > **用户属于平台,不属于某个工作人员或某个组织的私人资源。** > **角色决定能做什么,数据范围决定能对谁做。** > **敏感信息永远需要额外权限。** > **红娘、审核员、活动人员、风控员职责必须分离。** > **志愿者始终使用最低权限。** > **机构合作不等于数据全共享。** > **工作人员离职,权限必须立即消失。** > **任何高风险操作必须可追溯。** > **任何权限设计都必须同时在服务端执行,不能只靠前端隐藏。** 最终后台不是为了让管理员“什么都能看到”,而是为了做到: > **每个人只看到完成自己工作所需要的内容,只能做自己被授权做的事情,而且做过的关键事情都能被追溯。** 这才是公益婚恋平台能够由多个组织、多个工作人员长期共同运营,而不会随着人员增加逐渐失控的基础。