feat(sso): strip owner prefix in roleKey; expose /sso/casdoor/config; casdoor env passthrough
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (java-kotlin) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
CodeQL Advanced / Analyze (python) (push) Canceled after 0s
Docker Image Build & Push / manifest (push) Canceled after 0s
Docker Image Build & Push / manifest (push) Canceled after 0s
Docker Image Build & Push / build-and-push-arm (push) Canceled after 0s
Docker Image Build & Push / build-and-push-amd (push) Canceled after 0s
Docker Image Build & Push / build-and-push-arm (push) Canceled after 0s
Docker Image Build & Push / build-and-push-amd (push) Canceled after 0s
Frontend Docker Image CI / Build and Push Frontend Docker Image (push) Canceled after 0s
Gateway Docker Image CI / Build and Push Gateway Docker Image (push) Canceled after 0s

- RoleResolver.roleKey 取组名最后一段再匹配前缀,兼容 Casdoor user.groups 的 owner/name 全 ID
- 前端 nginx 增加精确 location /sso/casdoor/config 转发网关
- docker-compose 网关服务透传 DEEPDATA_CASDOOR_* 环境变量(Spring relaxed binding)
This commit is contained in:
apescale
2026-08-31 11:37:23 +08:00
parent c9df36be90
commit 9b2ce37ceb
3 changed files with 24 additions and 0 deletions
@@ -79,12 +79,19 @@ public class RoleResolver {
/**
* 组名 → 角色键:命中前缀返回后缀小写(如 deepdata-admin → admin),否则 null。
* 前缀为空时按整名小写匹配(兼容 group-prefix 留空的自定义组名)。
*
* <p>Casdoor 的 user.groups 存的是 {@code owner/name} 全 ID(如 {@code built-in/deepdata-admin}),
* 开启 useGroupPathInToken 时更可能是多级组路径;统一取最后一段作为组名再匹配。
*/
private String roleKey(String group, String prefix) {
if (group == null || group.isBlank()) {
return null;
}
String g = group.trim();
int slash = g.lastIndexOf('/');
if (slash >= 0) {
g = g.substring(slash + 1);
}
if (prefix.isEmpty()) {
return g.toLowerCase(Locale.ROOT);
}