chenxing
|
30b4b0504a
|
oapi验签链治理③:删除 /oapi/internal/sign-key 兜底端点,oapi 可整段对外
build / build-push (push) Successful in 53s
- 删 SignKeyInternalController(/oapi/internal/sign-key/{appId},返回 appSecret)、
SignKeyInternalIpFilter、SignKeyInternalProperties 三文件
- application.yml 删 yh.sign-key-internal 块(其中 192.168.10.0/200 本就是非法前缀,永不匹配)
- OpenApiAuthEnforceConfiguration:删 IP 白名单过滤器与 SignKeyInternalProperties 注册;
**保留 /api/open 与 /oapi/* 的强制签名**(② oapi 整段对外代理依赖它)
- OapiLogAspect:删对 SignKeyInternalController 的排除死代码
- SignKeyCacheService 契约固化:验签密钥以共享 Redis sign:app:* 为单一真源、UserBase 唯一写入方、
读写走密钥链专用库(缺省 db0)、读侧无兜底(Redis 不可用即 fail-closed)
- 实测线上该端点在容器内匿名访问为 403(IP 白名单生效)、公网无 Caddy 路由;
删除后既无密钥外泄面,也使 /userbase/oapi/* 整段代理安全
验证:mvn compile 通过;本模块单测 124 项中 5 项 MySQL 连接失败为环境性(已用 git stash 在
原始树复跑证明同样失败)。
|
2026-09-16 18:08:25 +08:00 |
|
chenxing
|
9ec65698b6
|
feat(approle): 角色属性绑定加组维度,一行=用户×组×角色
build / build-push (push) Successful in 3m37s
- sys_user_app_role_rel 新增 group_id:组=绑定发生时所选组(路径不落库,按组ID实时拼)
- 角色用户列表按绑定行返回,新增部门列(groupPath 按查看者数据范围裁剪,学校管理员只看本校)
- 保存改为按组覆盖/增量添加:编辑弹窗按所在组覆盖,角色授权页增量添加不误删其他组绑定
- 调整组不带走角色:旧组绑定保留不生效,调回自动恢复
- collectEnabledRoleModuleIds 只算用户当前所在组上的启用角色(NULL 视为全局兜底)
- UserGroupTree/UserRoles 增加可选 groupId:所属部门按行收窄、角色按组回显
- 附迁移脚本 sys_user_app_role_rel_add_group_dimension.sql(回填主组 + 换唯一约束)
|
2026-09-16 16:33:29 +08:00 |
|
chenxing
|
ce131bf399
|
feat: oapi group/users 组成员端点(一键拉取教师组数据源)+ SignKeyCacheService 专用库支持 + 组授权存量
build / build-push (push) Successful in 1m17s
- /oapi/group/users?groupId=&withSub=&roleIds=:组内用户列表(flow-center 办理人映射批量导入数据源)
- SignKeyCacheService:sign-redis.database 配置时走专用库模板(sign:app:* 跨应用共享)
- 含组授权/身份切换相关存量(GroupAuthz/GroupController 等 2026-09 前期改动)
|
2026-09-16 01:41:57 +08:00 |
|
chenxing
|
283ac4ca0a
|
feat(module): 模块表新增 icon 字段,GetUserMod 下发模块自身图标
build / build-push (push) Successful in 56s
旧实现 toBoaModule 用 app.getPcIcon() 覆写每个模块的 icon,导致各子应用左侧菜单图标
恒等于应用图标;且 app_module 根本没有图标列,"模块自己的图标"这一概念此前不存在。
- app_module 新增 icon 列(VARCHAR(128),存 YschIcons 图标名);实体/Request/Vo 同步,
新增走 BeanUtils 自动拷贝,edit 为逐字段赋值故显式补 setIcon(字段缺省即置空,清空可生效)
- GetUserMod:toBoaModule 不再覆写 icon,改由同名属性自动拷贝。**非必填**:模块未配图标时
BoaModule.icon 即为 null,不再回退应用图标,由消费方自行兜底
- 附幂等加列脚本 sql/app_module_add_icon.sql(5.7 无 ADD COLUMN IF NOT EXISTS,用
information_schema + PREPARE 兜子;本地 dev 靠 ddl-auto=update,脚本供 dev/prod 手工执行)
- 单测:修正原「icon 按应用级下发」断言为断言 null,并新增用例锁定「配了下发自身、没配为
null、应用 pcIcon 不得覆盖」,共 10 例全绿
|
2026-09-15 18:11:02 +08:00 |
|
chenxing
|
b0a02e56b0
|
feat(oapi): GetUserMod 下发嵌套模块树,层级经 BoaModule.children 承载
build / build-push (push) Successful in 2m42s
模块表 app_module 是 level<=5 的树,管理端下发时带 children,但开放接口这条链
转成平台 BoaModule 时层级被拍平(且旧 SDK 契约无 children 字段可承载),导致每个
子应用各自复制一份 buildModuleTree 重建父子关系。
现按同目录 BoaGroup.children 的既有口径补齐:findUserModulesForApp 的三个返回点
(超管短路 / 应用无模块 / 正常路径)统一收口到 assembleModuleTree 建树。
语义:顶层只放真根(parentId 为空),兄弟沿用开放接口原有 customId 升序口径(不与
管理端 sortNo+id 统一),叶子 children 为空列表以便前端无判空递归;父模块不在本次已
授权集合内的孤儿子节点连同整枝子孙一并丢弃,并逐条打 warn([oapi:modules] drop
orphan module)避免静默少菜单——授权配置须保证「授权子模块必先授权父模块」。
新增 GroupAuthzServiceModuleTreeTest 9 例:三级嵌套与排序、sortNo 不参与、叶子空
列表、parentId 成环不死循环、全 level-1 时与改造前扁平输出等价、无模块返空、孤儿整
枝丢弃、父子同授权则嵌套、JSON 往返证明层级确实经线格式下发且可反序列化。
|
2026-09-15 16:20:05 +08:00 |
|
chenxing
|
0b67382076
|
fix(oapi): 请求体反序列化失败给友好提示,避免误报 code=6 内部服务错误
build / build-push (push) Successful in 2m31s
GlobalExceptionHandler 新增 HttpMessageNotReadableException 处理:Jackson 在进 Controller 前抛的
解析失败(如 birthday 非 yyyy-MM-dd)此前无专属 handler,穿透到 api-std 兜底渲染成 code=6「内部服务错误」。
改为从异常 path 取失败字段名,birthday 点名「字段类型需为yyyy-MM-dd」、其余走通用文案,统一复用
paramError 返回 code=4。空串/null 由 Jackson 归一为 null 不抛,满足「空不管」。附单测 2 例。
|
2026-09-11 14:48:38 +08:00 |
|
chenxing
|
877e800f82
|
perf(identity): 主身份解析先查身份行短路 + 接入无身份计数观测
build / build-push (push) Successful in 57s
- resolveMainIdentity / resolveMainIdentityByUser 求值顺序反转:先取身份行,
为空立即 null,不再先走 resolveSchoolId(沿 sys_group 祖先链无缓存、6~8 次 SQL);
批量版只对确有身份行的用户解析主校,跳过空页。有身份用户结果与查询次数不变。
- IdentityService 新增进程级 nullIdentityLookups,getCurrent 落 null 分支自增,
经 getNullIdentityLookupCount() 暴露;CacheRegistryController 在 /cache/registry
输出 identityCurrentNullLookups,作为「是否给 null 加哨兵缓存」的唯一数据源。
- IdentityServiceTest 补 4 用例锁住短路契约与计数,旧 noGroup 用例补桩身份行。
|
2026-09-11 10:29:33 +08:00 |
|
chenxing
|
2106ba3d00
|
fix(user): 组用户导出「用户身份」图例 2 由「教职工」改为「校领导」
build / build-push (push) Successful in 52s
对齐权威枚举 SysRoleEnum(SCHOOL_LEADER=2,"校领导"),导出列头图例
(1教师 2教职工 3学生 4家长) 中的旧称「教职工」更正为「校领导」。
|
2026-09-11 10:20:52 +08:00 |
|
chenxing
|
d6e995a954
|
fix(sysuser): 编辑用户接口误抛「组ID不能为空」
build / build-push (push) Successful in 1m40s
SysUserController.edit 无条件调用 requireGroupInScope(request.getGroupId()),
而该方法对 null 直接抛错;但 service.edit 不读 groupId、DTO 仅在 Create 校验、
前端编辑按契约不提交 groupId,导致每次编辑必崩。改为仅当 groupId 非空时才校验
其落在数据范围内,越权防线仍由 requireUserInScope(id) 承担。mvn test 102 全绿。
|
2026-09-11 09:58:58 +08:00 |
|
chenxing
|
5cec25736a
|
revert 7acfabfa70
build / build-push (push) Canceled after 10s
revert 删除目录「.gitea」
|
2026-09-10 15:00:54 +08:00 |
|
chenxing
|
7acfabfa70
|
删除目录「.gitea」
|
2026-09-10 14:59:53 +08:00 |
|
chenxing
|
fb3c5671c6
|
fix(ci): .dockerignore 产物白名单对齐 app.jar
build / build-push (push) Successful in 57s
4131dca 统一 Dockerfile/build.yml 固定产物名为 app.jar 时漏改本文件,
残留初始提交的 !target/userbase.jar 白名单——target/* 规则把 CI 拷回的
target/app.jar 排除出构建上下文,COPY 报 not found(run 特征:maven 步绿、
docker 步炸、context 仅传 ~3.5kB)。
|
2026-09-10 11:39:46 +08:00 |
|
chenxing
|
3421851b6f
|
feat: oapi /oapi/app/list 接入学校别名 + userbase 缓存事件失效基建
build / build-push (push) Failing after 20s
别名接入(本次):
- SchoolAppOverrideService 新增上下文无关合并口 applyAlias:按单一学校覆盖
BoaAppType/BoaApp 名称/图标/排序,覆盖字段为空回落主表真名(无别名=真实名),
分类间/分类内按生效排序重排,口径与管理端 mergeAppVo/mergeCategoryList 一致
- listBoaAppType 新增可选 schoolId:生效学校三级兜底=显式传校(assertSchoolId
锚点+用户归属校验,违规 code=5)→ 当前激活身份学校 → 主归属学校,均无则不合并
- userAppList 缓存 key 扩 :s: 维度:auto 字面量随用户精确枚举驱逐(8→16 条),
显式学校后缀不可枚举靠 60s TTL 自愈;别名写口 AppAuthzChangedEvent 整清链路复用
- 新增 SchoolAppOverrideServiceApplyAliasTest(10)/AppCategoryServiceSchoolAliasTest(8),
更新 CacheInvalidationListenerTest 16-key 断言;全量 102 用例全绿
缓存事件失效基建(前次会话实现,随本 commit 入库):
- AppAuthzChangedEvent/UserGroupRelLoader/CacheInvalidationListener 四事件
AFTER_COMMIT 失效链路 + CacheNames 注册表(TTL/抖动/存放路由/依赖表/失效责任)
- 应用授权域/组域/用户域各写口发布失效事件(AppModule/AppRole/GroupAuthz/
SysGroup/SysUser/Identity 等服务),配套 AppAuthzEventPublishTest 等用例
|
2026-09-10 11:13:30 +08:00 |
|
chenxing
|
46a9587160
|
ci: build.yml maven 容器名唯一化(- 按 SHA 前缀),消除同 runner 跨仓库 mavenbuild 冲突
build / build-push (push) Failing after 1m18s
|
2026-09-09 20:47:11 +08:00 |
|
chenxing
|
4131dca66e
|
chore: 关联注入的标准 CI(build.yml)——移除遗留 ci.yml,Dockerfile/run-app.sh 产物对齐 app.jar
build / build-push (push) Failing after 47s
|
2026-09-09 18:16:35 +08:00 |
|
chenxing
|
a2a6145ed2
|
chore: 合并注入的标准 CI(909117e build.yml)
|
2026-09-09 18:13:51 +08:00 |
|
chenxing
|
f5680be7a8
|
chore: env-config 迁移重建镜像重试(并发原因 run879 失败)
|
2026-09-09 18:07:58 +08:00 |
|
admin
|
909117ea42
|
ci: init build workflow [skip ci]
|
2026-09-09 18:01:36 +08:00 |
|
chenxing
|
0d0a680b82
|
refactor: 删除 PropertyEnvConfigSource,env-config 数据源由平台默认挂载文件源兜底(yh-env-config starter B2 下沉)
ci-userbase-service / build-and-push (push) Failing after 49s
|
2026-09-09 11:27:43 +08:00 |
|
chenxing
|
5347559112
|
ci: markDeployed 修复后端到端复验
ci-userbase-service / build-and-push (push) Successful in 53s
|
2026-09-08 16:48:41 +08:00 |
|
chenxing
|
783ccd99fe
|
ci: 换仓对接验证(userbase/UserbaseService)
ci-userbase-service / build-and-push (push) Successful in 1m0s
|
2026-09-08 16:22:58 +08:00 |
|
chenxing
|
751a482456
|
ci
ci-userbase-service / build-and-push (push) Failing after 39s
|
2026-09-07 20:12:41 +08:00 |
|
chenxing
|
07e803b440
|
env-config修订
|
2026-09-07 18:17:02 +08:00 |
|
chenxing
|
1047d2387f
|
后端缓存管理
|
2026-09-07 09:33:10 +08:00 |
|
chenxing
|
79b1d99db9
|
上传头像功能修订
|
2026-09-02 11:43:27 +08:00 |
|
chenxing
|
d018567642
|
上传头像功能实现
|
2026-09-02 10:23:41 +08:00 |
|
chenxing
|
53b2fedb7a
|
上传头像功能实现
|
2026-09-02 10:23:31 +08:00 |
|
chenxing
|
73e404633d
|
bug修订
|
2026-09-02 08:40:18 +08:00 |
|
chenxing
|
a937984f0b
|
ci: webhook 响应体校验(projman 业务错误也返回 HTTP 200,检测 code 字段防止静默失败)
|
2026-09-01 20:18:56 +08:00 |
|
chenxing
|
3e38d702e6
|
ci: 切换 projman 发布链路(构建->Nexus->webhook 通知 projman 部署 10001),移除 docker run 8060 自部署
|
2026-09-01 20:16:06 +08:00 |
|
chenxing
|
71adaf6acb
|
健康检查功能添加
|
2026-09-01 11:50:49 +08:00 |
|
chenxing
|
bf4e1552b8
|
GetUserMod模块列表改按customId配置编码排序
|
2026-08-31 22:04:24 +08:00 |
|
chenxing
|
c588dedea7
|
跨校身份修订
|
2026-08-27 20:14:12 +08:00 |
|
chenxing
|
ebbaeee181
|
用户启用不启用接口开发
|
2026-08-27 10:08:58 +08:00 |
|
chenxing
|
6675ccc8d5
|
转出状态2
|
2026-08-26 12:38:55 +08:00 |
|
chenxing
|
5627252eab
|
转出状态以及相关接口更改
|
2026-08-26 12:38:31 +08:00 |
|
chenxing
|
0b0be6b8e5
|
Merge remote-tracking branch 'origin/main' (仓库 .git 修复)
|
2026-08-21 10:46:58 +08:00 |
|
chenxing
|
f182fe44ce
|
本地工作区快照:恢复 .git 仓库(合并远端 main 前基线)
|
2026-08-21 10:46:47 +08:00 |
|
chenxing
|
e4d6e1da11
|
修复添加顶层组的bug
|
2026-08-20 19:05:06 +08:00 |
|
chenxing
|
355920746b
|
修改推送日志功能
|
2026-08-20 12:15:48 +08:00 |
|
chenxing
|
db0d5e1a2d
|
修改推送日志功能
|
2026-08-20 10:57:23 +08:00 |
|
chenxing
|
e001bc9d77
|
添加推送日志功能
|
2026-08-20 10:24:47 +08:00 |
|
chenxing
|
99414e2887
|
推送订阅添加批量删除功能
|
2026-08-20 09:31:50 +08:00 |
|
chenxing
|
d472902957
|
推送订阅添加批量删除功能
|
2026-08-19 20:38:12 +08:00 |
|
chenxing
|
f3656057d4
|
推送订阅添加批量删除功能
|
2026-08-19 20:38:00 +08:00 |
|
chenxing
|
a91dacd442
|
推送订阅更改
|
2026-08-19 17:35:55 +08:00 |
|
chenxing
|
4c67ec0ed0
|
用户删除订阅功能更新
|
2026-08-19 17:22:38 +08:00 |
|
chenxing
|
b521f9634b
|
spring doc文档更新
|
2026-08-19 12:01:52 +08:00 |
|
chenxing
|
2ca67730f7
|
修改文档传递
|
2026-08-19 11:28:47 +08:00 |
|
chenxing
|
44f966c33b
|
其他接口
|
2026-08-18 21:51:18 +08:00 |
|