package migration import ( "fmt" "gofaster/internal/auth/model" "gorm.io/gorm" ) // AddPermissionCodeField 为权限表添加code字段 func AddPermissionCodeField(db *gorm.DB) error { fmt.Println("🔧 开始为权限表添加code字段...") // 检查code字段是否已存在 var count int64 err := db.Raw("SELECT COUNT(*) FROM information_schema.columns WHERE table_name = 'permissions' AND column_name = 'code'").Count(&count).Error if err != nil { return fmt.Errorf("检查code字段失败: %v", err) } if count > 0 { fmt.Println("✅ code字段已存在,跳过添加") return nil } // 添加code字段 err = db.Exec("ALTER TABLE permissions ADD COLUMN code VARCHAR(50)").Error if err != nil { return fmt.Errorf("添加code字段失败: %v", err) } // 为现有权限记录生成code var permissions []model.Permission err = db.Find(&permissions).Error if err != nil { return fmt.Errorf("查询现有权限失败: %v", err) } fmt.Printf("🔧 为 %d 条现有权限记录生成code...\n", len(permissions)) for _, permission := range permissions { code := fmt.Sprintf("%s:%s", permission.Resource, permission.Action) err = db.Model(&permission).Update("code", code).Error if err != nil { return fmt.Errorf("更新权限 %d 的code失败: %v", permission.ID, err) } fmt.Printf("✅ 已为权限 '%s' 生成code: %s\n", permission.Name, code) } // 添加唯一索引 err = db.Exec("CREATE UNIQUE INDEX idx_permissions_code ON permissions(code)").Error if err != nil { return fmt.Errorf("创建code唯一索引失败: %v", err) } fmt.Println("✅ 权限表code字段添加完成") return nil }