Skip to content

Releases: go-admin-team/go-admin

v2.6.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 31 Aug 07:43
595c4a6

Nothing here requires action to keep working — no migration, no import path change. One behaviour change is worth reading first.

Behaviour change

Rate-limited requests now return HTTP 429. They previously returned HTTP 200 with code: 500 in the body, so a load balancer, an uptime monitor and a benchmark all counted a rejection as a success — the earlier load tests here reported over ten times the real throughput before a status distribution gave it away. The threshold moves to extend.rateLimit.inboundQPS, defaulting to the 200 that was hardcoded, so the limit itself is unchanged; set it to 0 to switch the limiter off behind a gateway that already rate-limits. #881


  • 🔒 Every tenant after the first was authorized against another tenant's policy. go-admin-core cached the casbin enforcer under a sync.Once, and this repository passed the same empty key for every configured database. In the multi-tenant setup — one database per host — every host after the first was handed the enforcer built from the first host's database and never loaded its own casbin_rule table: a permission granted in one tenant applied in the others, and one denied there stayed denied however that tenant was configured. Both halves are needed, and both land here. #885 core#141
  • 🔒 The captcha endpoint logged its own answer. Anyone who could read the application log could log in without solving it. #881
  • 🐛 The shipped configuration had no connection pool settings, so Go's defaults applied — and MaxIdleConns defaults to 2. Under load almost every request opened a TCP connection and closed it immediately, exhausting local ports: can't assign requested address, every request failing. Not slower, unavailable. The templates now set maxIdleConns: 20, maxOpenConns: 100 and connMaxLifeTime: 3600, with the reasoning next to them — maxOpenConns multiplies by instance count against the database's max_connections, and connMaxLifeTime has to stay under its wait_timeout. #881
  • 🐛 The memory queue's buffer was 100, which is where it starts dropping rather than how much it processes at once: Append discards the message and returns an error instead of waiting. Each stream has one consumer goroutine, and the login and operation log consumers write to the database, so a burst above that write rate has only the buffer to absorb it. Under load 100 dropped more than 60% of messages; 1000 dropped none. Applies when logger.enableddb is on. #881
  • 👌 The authorization path no longer recompiles a regexp per policy and per exclusion entry. casbin's util.KeyMatch2 calls regexp.MatchString, which compiles every time; the exclusion list is walked per request (32 entries, about 2,566 allocations) and the matcher runs once per permission the role holds. Serving GET /api/v1/dept to a non-admin whose role holds 201 permissions goes from 2,933 req/s to 13,882 at 256 concurrent, with p99 falling from 343ms to 39ms — throughput had been flat from 16 to 256 concurrent, the process saturated compiling patterns. Note that admin skips the permission check entirely, so none of this is visible when testing with an admin token. #885 core#141
  • 🔧 go-admin-core moves from v2.1.0 to v2.3.0, which is where several of the above come from and brings more besides: the in-memory queue lost about one message in seven when consumers registered while the first requests arrived — that queue carries the login and operation logs; ResolveSearchQuery panicked on an unexported field, so a single one on a search DTO took down the whole list endpoint; counter updates were lost under concurrency; and a cache sweep held one lock across the whole map, stalling reads for 16ms once a minute at a million entries. #881 #885
  • ✅ Adds a load-test harness reporting latency percentiles and the status-code distribution across a concurrency sweep. It is skipped unless GOADMIN_BENCH_ADDR points at a running server, so go test ./... is unaffected. The status distribution is what caught the 429 problem above. #881
  • 📝 Adds Traditional Chinese and Japanese READMEs, repoints the build badge — it had reported failing for years because it named a workflow that no longer exists — and unifies the documentation links. #882 #883
  • 🔧 Documentation-only changes no longer trigger the deploy workflow. #884

Throughput figures were measured against MySQL on one machine, load generator and server sharing it. Read them as relative changes rather than numbers your hardware will reproduce.


本次发布没有任何需要动手才能继续工作的变更 —— 不用迁移,不用改导入路径。有一处行为变更值得先读。

行为变更

被限流的请求现在返回 HTTP 429。 此前返回的是 HTTP 200,只在 body 里写 code: 500,于是负载均衡、可用性监控和压测都把一次拒绝算成了一次成功 —— 本仓库早前的压测因此报出了十倍于真实值的吞吐,直到打印状态码分布才发现。阈值移到 extend.rateLimit.inboundQPS,默认值就是此前写死的 200,所以限流阈值本身没有变化;部署在自带限流的网关后面时,填 0 可以关闭限流。#881


  • 🔒 第一个之后的所有租户,都在用别的租户的策略做鉴权。 go-admin-core 用 sync.Once 缓存 casbin enforcer,而本仓库对每个已配置的数据库都传了同一个空 key。在多租户配置下(每个 host 一个库),第一个之后的每个 host 拿到的都是用第一个 host 的库构建的 enforcer,从未加载过自己的 casbin_rule 表:一个租户里授予的权限会在其他租户生效,而那里被拒绝的,无论该租户怎么配都仍然被拒绝。两侧改动缺一不可,本次一并发布。#885 core#141
  • 🔒 验证码接口把自己的答案写进了日志。任何能读到应用日志的人都可以不解验证码直接登录。#881
  • 🐛 随仓库分发的配置里没有连接池设置,于是走 Go 的默认值 —— 而 MaxIdleConns 默认只有 2。高负载下几乎每个请求都新建一条 TCP 连接、用完立刻关闭,本机端口迅速耗尽:can't assign requested address,请求全部失败。不是变慢,是不可用。 配置模板现在给出 maxIdleConns: 20、maxOpenConns: 100、connMaxLifeTime: 3600,并在旁边写清了取值依据 —— maxOpenConns 要乘以实例数再跟数据库的 max_connections 比,connMaxLifeTime 必须小于它的 wait_timeout。#881
  • 🐛 内存队列的缓冲长度是 100,而这个值是「从哪里开始丢」而不是「一次处理多少」:队列满时 Append 直接丢弃该消息并返回错误,不会阻塞等待。每个 stream 只有一个消费 goroutine,而登录日志、操作日志的消费要写数据库,突发流量高于这个写入速度时,缓冲区是唯一的缓解手段。压测中 100 的丢弃率超过 60%,1000 为 0。仅在 logger.enableddb 开启时生效。#881
  • 👌 鉴权路径不再为每条策略、每个排除项重新编译一次正则。 casbin 的 util.KeyMatch2 调用的是 regexp.MatchString,每次都重新编译;而排除列表每请求遍历一次(32 项,约 2,566 次内存分配),匹配器则对角色持有的每条权限各跑一次。对持有 201 条权限的非 admin 用户提供 GET /api/v1/dept,256 并发下从 2,933 req/s 提升到 13,882,p99 从 343ms 降到 39ms —— 改动前吞吐从 16 到 256 并发是持平的,进程已被正则编译打满。注意 admin 会完全跳过权限校验,所以用 admin 账号测试看不到这里的任何变化。#885 core#141
  • 🔧 go-admin-core 从 v2.1.0 升到 v2.3.0,上面几条中有几条正来源于此,此外还带来:内存队列在「首批请求到达的同时注册消费者」时约每七条丢一条 —— 而登录日志和操作日志走的就是这条队列;ResolveSearchQuery 遇到未导出字段会 panic,搜索 DTO 上只要有一个,整个列表接口就崩;计数器在并发下丢更新;缓存清理持有单一锁遍历整张表,百万条目下每分钟让读取停顿 16ms。#881 #885
  • ✅ 新增压测工具,在一轮并发扫描中输出延迟分位数和状态码分布。未设置 GOADMIN_BENCH_ADDR 指向运行中的服务时自动跳过,不影响 go test ./...。上面那个 429 的问题,正是靠状态码分布发现的。#881
  • 📝 新增繁体中文与日文 README,修正构建徽章 —— 它多年来一直显示 failing,因为指向的工作流早已不存在 —— 并统一了文档站链接。#882 #883
  • 🔧 只改文档时不再触发部署工作流。#884

吞吐数据在单台机器上对 MySQL 实测,压力生成器与服务端共用同一台机器。请作为相对变化幅度参考,而非你的硬件上可复现的绝对值。

v2.5.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 27 Aug 11:59
76c9d12

This release carries two breaking changes. Read this section before upgrading.

⚠️ Before you upgrade

1. The core import path changed. Go requires a major version of 2 or above to carry /v2 in the module path, so every
github.com/go-admin-team/go-admin-core becomes github.com/go-admin-team/go-admin-core/v2.
That is 210 imports across 95 files here. Anyone who forked this repository will hit conflicts on the import lines when merging upstream — core ships a codemod, coreupgrade, that rewrites them in one pass. #864

2. You must run migrate. The soft-delete marker changes from a nullable datetime to a non-null millisecond integer. Skip the migration and the server starts, but every login is rejected as an incorrect username or password: the code queries deleted_at = 0 while an older database holds NULL, and NULL = 0 is never true. Logins are not the only casualty — menus and departments become invisible too. #863 #870


  • 🔒 Stop writing the database password into the log. The startup line printed the DSN whole, so every deployment wrote its own credential into its own logs, where a log shipper, a support bundle or a screenshot carries it onward. The host and username stay; only the password is replaced. #880
  • 🐛 Fix logins failing on a fresh MySQL install. A seeded menu's sort exceeded MySQL's tinyint, so the run stopped there with Error 1264 and the soft-delete conversion never ran — leaving deleted_at NULL and the login rejecting a password that was correct. sqlite ignores the declared width, so the fault appeared only on MySQL. #877
  • 🐛 Fix the soft-delete migration against a real schema: it dropped a column while an index still referred to it, which SQLite refuses, and read rows through a column named id when sys_dept keys on dept_id and sys_user on user_id. #870
  • 🐛 Give the natural keys a constraint the database can keep. username, role_key and dict_type relied on a SELECT COUNT followed by an INSERT, which two concurrent requests both pass. A nullable delete marker cannot take part in a unique index — NULL is not equal to NULL, so the index looks like a constraint and enforces nothing. #863
  • Code generator
    • 🐛 Fix the column-list endpoint. pkg.Assert panics when its condition is false, and the guard read Assert(TableName == "") — so every request carrying a table name was rejected and the empty one was let through. The model layer repeated the inversion. The endpoint had never returned data. #865
    • 🐛 Fix the mysql-only guard, which was written Assert(true, ...) and never fired. On postgres or sqlserver it returned an empty list with a nil error, or dereferenced a zero-value *gorm.DB. #865
    • 🐛 Fix the table list coming back empty. sys_columns and sys_tables were left out of the soft-delete conversion, so they were queried with deleted_at = 0 against a nullable datetime and every row was invisible. #877
    • 🐛 Fix the candidate table query assuming one database. It named the schema by hand, failing outright when generating from another, and read past the soft delete — so deleting a generator entry never handed its table back. #865
  • File upload
    • 🐛 Fix the panic on source=2 and source=3. Both branches built a zero-value client and called upload on it, asserting a nil Client field. #875
    • 🐛 Fix the qiniu branch uploading to aliyun: qiniuUpload constructed ALiYunOSS, so source=3 could not have reached qiniu even with credentials. #875
    • 🐛 Cloud storage had never been wired up: OXS.Setup is the initialisation path and nothing called it, and no configuration field existed. Credentials now come from extend.fileStore, and an unconfigured provider says so instead of crashing. #875
    • 🐛 Fix Huawei OBS reporting success on a failed upload — the error was printed and nil returned. #875
  • 🐛 Report an unknown database driver instead of panicking. opens[driver] handed gorm.Open a nil function to call, so the operator saw a nil dereference inside gorm with nothing naming the driver — sqlite3 especially, since it needs cgo and only compiles in under the sqlite3 build tag. #865
  • 👌 Stop looking up the data scope on every request. The EnableDP check lived in the scope rather than the middleware, so with data permission switched off — the shipped default — every list, detail, update and delete still paid for a sys_user join whose result was discarded. deptid also joins the token, so all four values the scope is decided by can now be read from it. #876
  • 🔧 Deploys run migrations first and roll back when the new version does not come up. Previously docker rm -f then docker run, with no migration and no health check: a container that exited immediately left the site down with a green deploy. Healthy requires both an HTTP response and a database connection — the captcha endpoint answers without touching the database, so HTTP alone would call a container healthy that cannot reach MySQL. #880
  • 🔧 Make migration output legible. An applied migration printed a bare 1, so seven of them wrote seven lines of 1, and a failure named the error but never the migration. #880
  • 📝 Repoint the README links that stopped resolving: the documentation tutorials, the archived jwt-go repository, and an external link that no longer answers. #867
  • 🔧 Remove the repository mirrors and the leftover Dockerfilebak. #868 #873

本次发布带两处破坏性变更,升级前请先读这一节。

⚠️ 升级必读

1. core 的导入路径变了。 Go 要求主版本 ≥2 必须把 /v2 写进模块路径,所以
github.com/go-admin-team/go-admin-core 全部变成 github.com/go-admin-team/go-admin-core/v2。
本仓库改了 210 处、95 个文件。fork 过本仓库的人合并上游时会在 import 行大量冲突,
可用 core 自带的 coreupgrade 一次性重写自己项目里的导入。#864

2. 必须执行 migrate。 软删除标记从「可空 datetime」改为「非空毫秒整数」,
不跑迁移会出现能启动、但登录报「账号密码不正确」,因为代码查 deleted_at = 0
而旧库里是 NULL,NULL = 0 恒为假 —— 不只是登录,菜单、部门也会全部查不到。
#863 #870


  • 🔒 数据库密码不再写进日志。启动那行日志此前打印完整 DSN,等于每个部署都把自己的数据库凭证写进自己的日志里,日志采集、故障包、终端截图都会把它带走。现在只保留 host 和用户名。#880
  • 🐛 修复 MySQL 全新安装无法登录。种子菜单的 sort 值超出 MySQL 的 tinyint 范围,迁移在这里以 Error 1264 中断,后面的软删除转换从未执行,于是 deleted_at 停在 NULL,登录报「账号密码不正确」而密码其实是对的。sqlite 忽略列宽,所以这个故障只在 MySQL 上出现。#877
  • 🐛 修复软删除迁移在真实表结构上跑不完。删列前未先删依赖索引(SQLite 直接拒绝),且读取行时把主键写死成 id(sys_dept 是 dept_id、sys_user 是 user_id)。#870
  • 🐛 自然键补上数据库层的唯一约束。username / role_key / dict_type 此前只靠「先 COUNT 再 INSERT」保证唯一,并发下两个请求都能通过。可空的删除标记进不了唯一索引 —— NULL 不等于 NULL,索引看着像约束、实际不约束任何东西。#863
  • 代码生成器
    • 🐛 修复取字段列表的接口。pkg.Assert 是条件为假时 panic,而守卫写成了 Assert(TableName == ""),于是带表名的请求全部 500,不带表名的反而放行;模型层还有一处方向相同的反向判断。这个接口从未返回过数据。#865
    • 🐛 修复「只支持 MySQL」的守卫从未生效。写成了 Assert(true, ...),是个空操作。postgres / sqlserver 上不会报错,而是返回空列表加 nil error,或者在零值 *gorm.DB 上崩溃。#865
    • 🐛 修复表列表为空。sys_columns / sys_tables 漏在软删除转换清单之外,运行时用 deleted_at = 0 去查一个可空 datetime 列,每一行都不可见。#877
    • 🐛 修复候选表查询假设只有一个库。排除清单用手写 schema 名的子查询,从别的 schema 生成时直接失败;而且它绕过软删除,删掉生成器条目后那张表再也回不到候选列表。#865
  • 文件上传
    • 🐛 修复 source=2 / source=3 触发 panic。两个分支都在构造零值客户端就调用上传,而 Client 字段为 nil,类型断言直接崩。#875
    • 🐛 修复七牛分支实际走的是阿里云。qiniuUpload 构造的是 ALiYunOSS,所以 source=3 即使有凭证也到不了七牛。#875
    • 🐛 云存储此前从未接通:初始化入口 OXS.Setup 全仓无人调用,配置里也没有对应字段。现在从 extend.fileStore 读取,未配置的服务商返回明确错误而不是崩溃。#875
    • 🐛 修复华为云 OBS 上传失败却返回成功。错误被打印后 return nil。#875
  • 🐛 数据库 driver 未知时给出可读报错。opens[driver] 取到 nil 函数直接被调用,操作者看到的是 gorm 深处的空指针,没有任何信息指向 driver 名 —— sqlite3 尤其容易踩到,它需要 cgo 且只在 sqlite3 构建标签下编入。#865
  • 👌 数据权限不再每请求查一次库。EnableDP 的判断原本在 scope 里而不在中间件里,所以即使数据权限关闭(默认配置就是关的),每个列表/详情/更新/删除仍要跑一次 sys_user join,查完丢掉。同时 deptid 补进 token,四个判定值现在都能从 token 读到。#876
  • 🔧 部署流程:先跑迁移,起不来则回滚。此前是 docker rm -f 后 docker run,不跑迁移、不做健康检查,容器起不来就是「站点已挂、部署全绿」。健康检查要求 HTTP 与数据库连接同时成立 —— 验证码接口不碰数据库,只看 HTTP 会把连不上库的容器判为健康。#880
  • 🔧 迁移输出可读。已执行的迁移原本打印一个裸的 1,七条迁移就是七行 1;失败时只报错误、不说是哪条迁移。#880
  • 📝 修复 ...
Read more

v2.4.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 16 Aug 03:13
5864058

🚨 已知问题:MySQL 上迁移无法执行完成 / Known issue: migrations cannot complete on MySQL

本版本在 MySQL 上执行 migrate 会中断,报 Error 1264 (22003): Out of range value for column 'sort'。
种子菜单的 sort 值超出 MySQL 的 tinyint 范围,而迁移框架不是事务性的,运行到此为止。

后果是下面这段清理迁移从未执行 —— 它排在出错的那条之后,所以本页要求的
「清理库中的残留权限数据」在 MySQL 上并没有生效。sqlite 忽略列宽,不受影响。

已在 v2.5.0 修复,建议直接升级;
v2.5.0 同时修复了另外十余个问题,其中包含一个会把数据库密码写进日志的缺陷。


Running migrate on MySQL stops partway with Error 1264 (22003): Out of range value for column 'sort'.
A seeded menu's sort exceeds MySQL's tinyint, and the migration framework is not transactional, so the run ends there.

The cleanup migration below therefore never ran — it is ordered after the one that fails, so the
"清理库中的残留权限数据" this page asks for did not take effect on MySQL. sqlite ignores the declared width and is unaffected.

Fixed in v2.5.0, which is the recommended upgrade.

⚠️ 破坏性变更

移除 GET /api/v1/refresh_token

该接口用业务 token 即可换取新 token,而续期上限 MaxRefresh 依据的 orig_iat
在每次续期时被一并重置 —— 上限永远无法到达。token 一旦泄露即等同于永久访问权,
且框架没有任何吊销手段。它此前还位于 CasbinExclude 中,不受权限约束,任何角色
的已登录用户都能调用。

官方前端从未使用该接口,正常升级不受影响。

若你自行调用该端点实现续期,需改为重新登录。正确的无感续期应在
go-admin-core 中区分 access token 与 refresh token 后重新实现。

升级后请执行迁移,清理库中的残留权限数据:

./go-admin migrate -c config/settings.yml

🔒 安全

✨ 新功能

  • 新增 app/demo 标准 CRUD 参照模块 —— 一个完整的单表 CRUD 只需 model +
    dto + router 三个文件。它使用 common/actions 的五个通用 Action,无需手写
    Handler 与 Service。可编译、有测试、CI 会跑,替代此前只能靠模板传递的写法
  • 新增 AGENTS.md —— 给 AI 编码工具与新贡献者的约定,只写"不遵守就会出错"
    的规则
  • 新增 docs/architecture.md —— 数据权限五级模型、JobExec 接口、多数据源、
    迁移目录划分

🐛 修复

  • 修正 GeneralDelDto.GetIds 重复追加 Id
  • 修正欢迎页 iframe 高度塌陷
  • 限制部署步骤仅在 master 收到 push 时执行 —— 此前 PR 可触发生产部署

🔧 其他

  • 补充 sqlite3 构建标签说明:driver: sqlite3 时必须 go run -tags sqlite3 .,
    否则启动即 panic 且报错不提及构建标签
  • 修正 .DS_Store 忽略规则(原模式匹配不到仓库根目录)
  • 修正文件名拼写 int_router.go → init_router.go
  • 更新在线体验地址

配套前端版本:go-admin-ui v3.1.0

v2.3.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 11 Aug 17:10
92834d6

本次发布以工具链升级与安全加固为主,无 API 破坏性变更,可从 v2.2.0 平滑升级。

🔒 安全

已知漏洞由 25 个降至 0(govulncheck 按实际调用路径检测),Dependabot 告警由 23 个降至 0。

  • Go 工具链由 1.24 升级至 1.26.5,消除 21 个标准库漏洞(crypto/tls、crypto/x509、net/http)
  • github.com/jackc/pgx/v5 → v5.10.0,修复 SQL 注入(GO-2026-5004,影响 PostgreSQL 用户)
  • golang.org/x/net → v0.57.0,修复 HTTP/2 无限循环与 Punycode 校验绕过
  • golang.org/x/text → v0.40.0、golang.org/x/crypto → v0.54.0
  • golang.org/x/image → v0.41.0,修复 TIFF 解码资源耗尽
  • github.com/nyaruka/phonenumbers → v1.2.2

go.sum 已纳入版本控制。此前该文件被 .gitignore 排除,导致依赖完整性无法校验,go mod verify 形同虚设——这是供应链攻击的主要防线。

⬆️ 依赖升级

依赖 版本
gorm 1.25.12 → 1.31.2(含 4 个数据库驱动、dbresolver 1.6.2)
gin 1.10.0 → 1.12.0
casbin/v2 2.104.0 → 2.135.0
cobra 1.9.1 → 1.10.2
swag 1.16.4 → 1.16.6

🐛 CI 缺陷修复

Docker 镜像发布条件失效:go.yml 中 if: startsWith(${{github.ref}}, 'refs/tags/') 的写法有误——if 表达式内使用 ${{ }} 会先将 github.ref 替换为裸字符串再参与求值,导致条件判断失效。实际表现为每次 push 到 master 都会构建并推送镜像至 ghcr.io,而非仅在打 tag 时发布。同时 on.push 缺少 tags 配置,打 tag 反而不会触发工作流。两处均已修正。

Gitee / GitLab 镜像同步长期失败:actions/checkout 默认浅克隆与 git push --mirror 语义冲突,GitLab 报 shallow update not allowed,Gitee 报拒绝删除当前分支。补充 fetch-depth: 0 后恢复正常。

移除 3 个失效工作流:issue-labeled、issue-check-inactive、issue-close-require 依赖的 actions-cool/issues-helper 仓库已被 GitHub 封禁,工作流必然失败。

🔧 其他

  • GitHub Actions 全部升级并固定至完整 commit SHA:checkout v7.0.1、setup-go v7.0.0、codeql v4、docker/* 系列
  • docker/build-push-action 升级至 v7 并补充配套的 setup-buildx-action
  • README 环境要求更新为 go 1.26.5、Node v22+、pnpm

升级说明

  1. Go 版本要求提升至 1.26.5,请确认构建环境
  2. 使用 PostgreSQL 的用户建议尽快升级,本次修复了 pgx 的 SQL 注入漏洞
  3. 打 tag 现在才会触发 ghcr.io 镜像发布,push 分支仅执行构建

v2.2.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 08 Apr 12:56

Changelog

  • delete 🎉: Remove the example code run.go
  • refactor 🎨: Optimize the logging method and use log uniformly Replace log with Info Println
  • fix 🐛: Fix function call error for obtaining local host IP
  • refactor🎨: remove unused distributed lock setup code in initialize.go
  • fix🐛: include captcha answer in GenerateCaptchaHandler for improved logging
  • fix🐛: improve error logging in jobbase.go for better clarity
  • refactor🎨: update go version 1.24

v2.1.2

Choose a tag to compare

@wenjianzhang wenjianzhang released this 02 Nov 10:14
9d735ed

Changelog

  • fix🐛: Fix the problem that el-popconfirm does not take effect @wenjianzhang
  • fix🐛: Known bug fixes

v2.1.1

Choose a tag to compare

@wenjianzhang wenjianzhang released this 02 Aug 01:20

Changelog

v2.1.0

Choose a tag to compare

@wenjianzhang wenjianzhang released this 14 Apr 08:00
7d74e6f

Changelog

  • feat ✨: upgrade go1.18 @wenjianzhang
  • perf 👌: update casbin gorm adapter @wenjianzhang
  • perf 👌: remove casbin sys_ @ wenjianzhang
  • perf 👌: upgrade gorm,casbin,gin,uuid version @wenjianzhang
  • refactor 🎨: errors add go mod @wenjianzhang
  • refactor 🎨: update 1599190683659_ tables.go @Vingurzhou
  • refactor 🎨: reload policy policy after role creation and update @wenjianzhang
  • refactor 🎨: add menu paths default data @wenjianzhang
  • refactor 🎨: delete template middleware duplicate initialization code @zyd
  • refactor 🎨: catch exception return error message @zyd
  • docs 📝: add development environment requirements @wenjianzhang
  • docs 📝: write dockerfile startup script @haimat
  • config 🔧: set DB CHARSET utf8mb4(#674) @wenjianzhang
  • config 🔧: modify the instruction createapp to app @wenjianzhang
  • fix 🐛: customized error middleware bug fix @wenjianzhang
  • fix 🐛: the path in the menu is not set to fix the problem. @wenjianzhang
  • fix 🐛: fix rolemenu @wenjianzhang
  • fix 🐛: fix github.com/alibaba/sentinel-golang middleware(#679) @wenjianzhang
  • fix 🐛: add MySQL judgment in data migration @wenjianzhang
  • fix 🐛: delete template middleware duplicate initialization code @wenjianzhang
  • fix 🐛: fix rolemenu @zhangzhenlun
  • fix 🐛: Fix menu interface menurole with incomplete data (# 676) @wenjianzhang
  • fix 🐛: Fix template get update delete error @zyd
  • fix 🐛: Repair role creation prompt empty slice found (#687) @wenjianzhang
  • fix 🐛: Fix create when creating a new create_ by Problem with by value of 0 (#688) @wenjianzhang
  • fix 🐛: Handling Postgre startup error issues @infnan
  • fix 🐛: Remove excess spaces from the template @zyd
  • fix 🐛: fix sys_ router && add swag commond @NaturalGao
  • fix 🐛: fix Sidebar Menu Sorting Problem (690) @wenjianzhang
  • fix 🐛: fix elegant restart does not take effect @quanbisen
  • fix 🐛: fix bug in filtering log creation time and reporting errors @haimat
  • fix 🐛: sort parameters must receive using string @zyd
  • fix 🐛: template Update method, err has not been assigned a value, and the returned err will always be nil @zyd
  • fix 🐛: e. The err output from Log. Errorf ("db error:% s", err) has not been assigned a value of @zhaodongdong
  • fix 🐛: update README @xiaobo
  • fix 🐛: fix the bug where ordinary users cannot modify their personal information (nickname, user password) when only using query permissions. @wenyoufu

Release v2.0.12

Choose a tag to compare

@wenjianzhang wenjianzhang released this 27 Jul 14:05

FIX🐛:

  • 添加bcrypt包的引用
  • 修复doc url of cgo
  • 修复角色新增、修改时,sys_casbin_rule表drop,然后重新create的问题(#539)
  • 修复 UpdatePwd error
  • 修复关闭中的job能够启动问题(#638)

REFACTOR🎨:

  • 引入github.com/pkg/errors更好的错误堆栈追踪

Release v2.0.11

Choose a tag to compare

@wenjianzhang wenjianzhang released this 27 May 16:48
3873342

FIX🐛:

  • Fix the problem that the closed job can start.#638
  • Add rolekey data duplicate verification.#649
  • Update readme. #629