package version import ( "runtime" "gorm.io/gorm" "gorm.io/gorm/clause" "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), migrateSenseLiveview) } func migrateSenseLiveview(db *gorm.DB, version string) error { return db.Transaction(func(tx *gorm.DB) error { page, err := ensureDeviceMenu(tx, migrationModels.SysMenu{MenuName: "SenseLiveview", Title: "实时监看", Icon: "eye-open", Path: "/sense/liveview", MenuType: "C", Permission: "sense:liveview:view", Component: "/sense/liveview/index", Sort: 8, Visible: "0", IsFrame: "1"}) if err != nil { return err } for _, role := range []string{"implementation_operator", "site_admin", "viewer"} { if err = attachDeviceRole(tx, role, []migrationModels.SysMenu{page}); err != nil { return err } for _, policy := range [][2]string{{"/api/v1/liveview/routes", "GET"}, {"/api/v1/liveview/sessions", "POST"}, {"/api/v1/liveview/sessions/:id", "GET"}} { 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 }) }