mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 10:13:01 +00:00
fix🐛: stop hand-writing the soft-delete condition, and check the count
Two things in front of the unique-index work, both safe on their own. getSysMenuByRoleName carried "deleted_at is null" in its where clause. GORM adds that condition itself for a model with a DeletedAt field, so it was a duplicate — and one phrased as a column being null, which stops being true the moment the column stops being nullable. A schema that moves to a non-null delete marker would have turned this query into one that matches nothing, silently, for admin users only. SysDictType.Insert dropped the error from its duplicate check: a query that failed left the count at zero and the insert went ahead as though the name were free. The test pins what the removed clause was there for. Its counter-proof is Unscoped rather than deleting the field — taking ModelTime off the model fails to compile, which proves nothing.
This commit is contained in:
@@ -395,7 +395,11 @@ func (e *SysMenu) getByRoleName(roleName string) ([]models.SysMenu, error) {
|
||||
data := make([]models.SysMenu, 0)
|
||||
|
||||
if roleName == "admin" {
|
||||
err = e.Orm.Where(" menu_type in ('M','C') and deleted_at is null").
|
||||
// The soft-delete condition is GORM's to add: it appends one for the
|
||||
// model's DeletedAt field on every query. Writing it by hand duplicates
|
||||
// that and hard-codes what "deleted" looks like — a column that stops
|
||||
// being nullable turns this clause into one that matches nothing.
|
||||
err = e.Orm.Where("menu_type in ('M','C')").
|
||||
Order("sort").
|
||||
Find(&data).
|
||||
Error
|
||||
|
||||
Reference in New Issue
Block a user