61 lines
2.5 KiB
Go
61 lines
2.5 KiB
Go
package version
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
|
|
"git.ilapage.cn/ila/yovision/Sense/server/app/sense/area"
|
|
"git.ilapage.cn/ila/yovision/Sense/server/cmd/migrate/migration"
|
|
migrationModels "git.ilapage.cn/ila/yovision/Sense/server/cmd/migrate/migration/models"
|
|
common "git.ilapage.cn/ila/yovision/Sense/server/common/models"
|
|
)
|
|
|
|
func init() {
|
|
_, fileName, _, _ := runtime.Caller(0)
|
|
migration.Migrate.SetVersion(migration.GetFilename(fileName), migrateSenseArea)
|
|
}
|
|
|
|
func migrateSenseArea(db *gorm.DB, version string) error {
|
|
return db.Transaction(func(tx *gorm.DB) error {
|
|
if err := tx.AutoMigrate(&area.Definition{}, &area.Version{}); err != nil {
|
|
return err
|
|
}
|
|
page, err := ensureDeviceMenu(tx, migrationModels.SysMenu{MenuName: "SenseArea", Title: "区域与警戒线", Icon: "guide", Path: "/sense/area", MenuType: "C", Permission: "sense:area:list", Component: "/sense/area/index", Sort: 9, Visible: "0", IsFrame: "1"})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
create, err := ensureDeviceMenu(tx, migrationModels.SysMenu{MenuName: "SenseAreaCreate", Title: "新增配置", MenuType: "F", Action: "POST", Permission: "sense:area:create", ParentId: page.MenuId, Sort: 1, Visible: "1", IsFrame: "1"})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
update, err := ensureDeviceMenu(tx, migrationModels.SysMenu{MenuName: "SenseAreaUpdate", Title: "编辑配置", MenuType: "F", Action: "PUT", Permission: "sense:area:update", ParentId: page.MenuId, Sort: 2, Visible: "1", IsFrame: "1"})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, role := range []string{"implementation_operator", "site_admin"} {
|
|
if err = attachDeviceRole(tx, role, []migrationModels.SysMenu{page, create, update}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err = attachDeviceRole(tx, "viewer", []migrationModels.SysMenu{page}); err != nil {
|
|
return err
|
|
}
|
|
read := [][2]string{{"/api/v1/area/configurations", "GET"}, {"/api/v1/area/configurations/:id/versions", "GET"}}
|
|
write := [][2]string{{"/api/v1/area/configurations", "POST"}, {"/api/v1/area/configurations/:id", "PUT"}}
|
|
for _, role := range []string{"implementation_operator", "site_admin", "viewer"} {
|
|
policies := append([][2]string{}, read...)
|
|
if role != "viewer" {
|
|
policies = append(policies, write...)
|
|
}
|
|
for _, policy := range policies {
|
|
if err = tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&deviceCasbinRule{Ptype: "p", V0: role, V1: policy[0], V2: policy[1]}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return tx.Create(&common.Migration{Version: version}).Error
|
|
})
|
|
}
|