migration

package
v0.0.0-...-e10842c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2023 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var SeedRBAC *gormigrate.Migration = &gormigrate.Migration{
	ID: "SEED_RBAC",
	Migrate: func(db *gorm.DB) error {
		tx := db.Begin()
		defer rollback(tx)
		v := reflect.ValueOf(consts.EntityNames)
		tableNames := make([]any, v.NumField())
		for i := 0; i < v.NumField(); i++ {
			tableNames[i] = consts.GetTableName(v.Field(i).Interface().(string))
		}
		v = reflect.ValueOf(consts.Permissions)
		permissions := make([]any, v.NumField())
		for i := 0; i < v.NumField(); i++ {
			permissions[i] = v.Field(i).Interface()
		}
		padmin := []models.Permission{}
		puser := []models.Permission{}
		for _, t := range tableNames {
			for _, p := range permissions {
				permission := models.Permission{
					Tag:         consts.FormatPermissionTag(p.(string), t.(string)),
					Description: consts.FormatPermissionDesc(p.(string), t.(string)),
				}
				if err := tx.Create(&permission).First(&permission).Error; err != nil {
					logger.Error(&err, "[Migration.Jobs.SeedRBAC.permissions] error: %s", err.Error())
					return err
				}
				padmin = append(padmin, permission)
				puser = append(puser, permission)
			}
		}
		for _, r := range consts.Roles {
			role := &models.Role{
				Name:        r.Name,
				Description: r.Description,
			}
			if err := tx.Create(role).First(&role).Error; err != nil {
				logger.Error(&err, "[Migration.Jobs.SeedRBAC.roles] error: %s", err.Error())
				return err
			}
			switch r.Name {
			case "admin":
				for _, p := range padmin {
					tx.Model(role).Association(consts.EntityNames.Permissions).Append(p)
				}
			case "user":
				for _, p := range puser {
					tx.Model(role).Association(consts.EntityNames.Permissions).Append(p)
				}
			}
		}
		tx.Commit()
		return nil
	},
	Rollback: func(db *gorm.DB) error {
		tx := db.Begin()
		defer rollback(tx)
		for _, u := range users {
			if err := tx.Delete(u).Error; err != nil {
				return err
			}
		}
		tx.Commit()
		return nil
	},
}

SeedRBAC inserts the first role-based access control

View Source
var SeedUsers *gormigrate.Migration = &gormigrate.Migration{
	ID: "SEED_USERS",
	Migrate: func(db *gorm.DB) error {
		tx := db.Begin()
		defer rollback(tx)
		for _, u := range users {
			if err := tx.Create(u).Error; err != nil {
				return err
			}
			apiKey := uuid.Must(uuid.NewV4()).String()
			if err := tx.Create(&models.UserAPIKey{UserID: u.ID, APIKey: apiKey}).Error; err != nil {
				return err
			}
		}
		tx.Commit()
		return nil
	},
	Rollback: func(db *gorm.DB) error {
		tx := db.Begin()
		defer rollback(tx)
		for _, u := range users {
			if err := tx.Delete(u).Error; err != nil {
				return err
			}
		}
		tx.Commit()
		return nil
	},
}

SeedUsers inserts the first users

Functions

func ServiceAutoMigration

func ServiceAutoMigration(db *gorm.DB) error

ServiceAutoMigration migrates all the tables and modifications to the connected source

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL