You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
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 |
|
}
|
|
|