Files
NetworkAuth/database/portal_navigation.go

121 lines
2.9 KiB
Go
Raw Permalink Normal View History

2026-04-17 03:12:28 +08:00
package database
import (
"NetworkAuth/models"
"errors"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
// NeedSeedDefaultPortalNavigation 判断是否需要修复默认门户导航。
// 仅在门户导航表缺失、关键字段缺失、没有任何数据或存在旧版脏数据时返回 true。
func NeedSeedDefaultPortalNavigation() (bool, error) {
db, err := GetDB()
if err != nil {
return false, err
}
if !db.Migrator().HasTable(&models.PortalNavigation{}) {
return true, nil
}
requiredColumns := []string{"type", "parent_id", "is_home", "is_hidden", "is_external"}
for _, column := range requiredColumns {
if !db.Migrator().HasColumn(&models.PortalNavigation{}, column) {
return true, nil
}
}
var count int64
if err := db.Model(&models.PortalNavigation{}).Count(&count).Error; err != nil {
return false, err
}
if count == 0 {
return true, nil
}
if err := db.Model(&models.PortalNavigation{}).Where("type = '' OR type IS NULL").Count(&count).Error; err != nil {
return false, err
}
if count > 0 {
return true, nil
}
return false, nil
}
2026-04-17 03:12:28 +08:00
// SeedDefaultPortalNavigation 初始化默认门户导航
// 当系统首次安装或升级后缺少默认入口时,自动补充首页和管理员登录入口
func SeedDefaultPortalNavigation() error {
db, err := GetDB()
if err != nil {
return err
}
defaultItems := []models.PortalNavigation{
{
Name: "首页",
Type: "link",
ParentID: 0,
2026-04-17 03:12:28 +08:00
Path: "/home/index",
Sort: 0,
IsHome: true,
IsHidden: false,
IsExternal: false,
},
{
Name: "管理员登录",
Type: "link",
ParentID: 0,
2026-04-17 03:12:28 +08:00
Path: "admin",
Sort: 999,
IsHome: false,
IsHidden: false,
IsExternal: false,
},
}
for _, item := range defaultItems {
var exists models.PortalNavigation
if err := db.Where("path = ?", item.Path).First(&exists).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
if err := db.Create(&item).Error; err != nil {
logrus.WithError(err).WithField("path", item.Path).Error("创建默认门户导航失败")
return err
}
continue
}
switch exists.Path == "admin" {
case true:
if err := db.Model(&models.PortalNavigation{}).Where("id = ?", exists.ID).Updates(map[string]interface{}{
"name": "管理员登录",
"type": "link",
"parent_id": 0,
2026-04-17 03:12:28 +08:00
"path": "admin",
"sort": 999,
"is_home": false,
"is_external": false,
}).Error; err != nil {
logrus.WithError(err).WithField("path", item.Path).Error("更新默认门户导航失败")
return err
}
default:
continue
}
}
if err := db.Model(&models.PortalNavigation{}).Where("type = '' OR type IS NULL").Updates(map[string]interface{}{
"type": "link",
"parent_id": 0,
}).Error; err != nil {
return err
}
2026-04-17 03:12:28 +08:00
logrus.Info("默认门户导航初始化完成")
return nil
}