Casdoor 简介
Casdoor 是一款开源的 UI 优先身份和访问管理(IAM)/ 单点登录(SSO)平台,为开发者和企业提供了全面且强大的身份验证与权限管理解决方案。它支持 OAuth 2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA 和 RADIUS 等众多协议,能满足不同类型应用在身份验证方面的多样化需求 。当前官网版本的 Casdoor 无法满足信创要求,主要原因是采用的数据库基本是国外主流的数据库,对国产自主可控的数据库没有适配,笔者在项目中遇到自主可控需求,并完成达梦数据库适配。
达梦数据库简介
达梦数据库是武汉达梦数据库股份有限公司推出的具有完全自主知识产权的高性能数据库管理系统,是被列入信创名录的数据库产品,目前在国企,银行等领域被广泛使用。
Casdoor适配达梦
XORM 适配达梦
Casdoor 使用 XORM 做数据库的接入操作。根据XORM 官方文档(xorm.io/docs/) 表明,其通过 xorm.NewEngine(driverName, dataSourceName) 创建引擎,支持 MySQL、PostgreSQL、SQLite 等数据库,驱动需实现 database/sql 接口。达梦 8 的官方 Go 驱动是基于 database/sql的,因此,理论上可以与 XORM 集成。
在实际操作中会有版本问题,Casdoor 集成的 XORM 版本过低,无法与达梦驱动集成,于是我们尝试升级 XORM 依赖到最新版,即可顺利集成。
Casdoor 日期操作调整
在完成 XORM 集成达梦之后,大部分功能都可以正常使用了,但是我还是遇到两个问题:
一个是 Casdoor 登录成功之后进入的看板页面,有个 getDashBoard 接口,使用了日期条件,在达梦数据库中日期格式的转换会有兼容问题。但是在我查看的 ORM 的配置之后,发现所有的日期字段,如 created_time 都使用了 varchar 类型而不是 datetime,可能是考虑不同数据库的兼容问题。但是在 getDashBoard 的接口代码中,还是使用了 Time 类型作为了 created_time 的入参,所以反而导致不兼容,在这里按照格式转换为字符串即可。同样格式的时间日期类型可以使用字典序做比较,也可以实现 datetime 类型的各种操作。详情参考 Github Commit
适配成果
已发布 DockerHub 镜像,支持 ARM64 与 AMD64 架构。可使用下面的命令快速启动:
docker run \
-e driverName=dm \
-e dataSourceName='dm://CASDOOR:[email protected]:5236/' \
-p 8000:8000 \
laotie255/casdoor:latest
后记
实际上这个过程也并不复杂,分享出来希望大家可以多多试用,并希望可以被官方采纳。