mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-16 06:23:50 +08:00
chore: unify migrate database way (#1530)
This commit is contained in:
@ -28,7 +28,6 @@ import (
|
|||||||
_ "modernc.org/sqlite" // db = sqlite
|
_ "modernc.org/sqlite" // db = sqlite
|
||||||
"xorm.io/core"
|
"xorm.io/core"
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
"xorm.io/xorm/migrate"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var adapter *Adapter
|
var adapter *Adapter
|
||||||
@ -42,7 +41,7 @@ func InitConfig() {
|
|||||||
beego.BConfig.WebConfig.Session.SessionOn = true
|
beego.BConfig.WebConfig.Session.SessionOn = true
|
||||||
|
|
||||||
InitAdapter(true)
|
InitAdapter(true)
|
||||||
initMigrations()
|
MigrateDatabase()
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitAdapter(createDatabase bool) {
|
func InitAdapter(createDatabase bool) {
|
||||||
@ -252,22 +251,3 @@ func GetSession(owner string, offset, limit int, field, value, sortField, sortOr
|
|||||||
}
|
}
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
func initMigrations() {
|
|
||||||
migrations := []*migrate.Migration{
|
|
||||||
{
|
|
||||||
ID: "20221015CasbinRule--fill ptype field with p",
|
|
||||||
Migrate: func(tx *xorm.Engine) error {
|
|
||||||
_, err := tx.Cols("ptype").Update(&xormadapter.CasbinRule{
|
|
||||||
Ptype: "p",
|
|
||||||
})
|
|
||||||
return err
|
|
||||||
},
|
|
||||||
Rollback: func(tx *xorm.Engine) error {
|
|
||||||
return tx.DropTables(&xormadapter.CasbinRule{})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
m := migrate.New(adapter.Engine, migrate.DefaultOptions, migrations)
|
|
||||||
m.Migrate()
|
|
||||||
}
|
|
||||||
|
@ -25,8 +25,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func InitDb() {
|
func InitDb() {
|
||||||
MigratePermissionRule()
|
|
||||||
|
|
||||||
existed := initBuiltInOrganization()
|
existed := initBuiltInOrganization()
|
||||||
if !existed {
|
if !existed {
|
||||||
initBuiltInModel()
|
initBuiltInModel()
|
||||||
@ -36,6 +34,8 @@ func InitDb() {
|
|||||||
initBuiltInApplication()
|
initBuiltInApplication()
|
||||||
initBuiltInCert()
|
initBuiltInCert()
|
||||||
initBuiltInLdap()
|
initBuiltInLdap()
|
||||||
|
} else {
|
||||||
|
MigrateDatabase()
|
||||||
}
|
}
|
||||||
|
|
||||||
initWebAuthn()
|
initWebAuthn()
|
||||||
|
85
object/migrate.go
Normal file
85
object/migrate.go
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// Copyright 2023 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.package object
|
||||||
|
|
||||||
|
package object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
xormadapter "github.com/casbin/xorm-adapter/v3"
|
||||||
|
"xorm.io/xorm"
|
||||||
|
"xorm.io/xorm/migrate"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MigrateDatabase() {
|
||||||
|
migrations := []*migrate.Migration{
|
||||||
|
MigrateCasbinRule(),
|
||||||
|
MigratePermissionRule(),
|
||||||
|
}
|
||||||
|
|
||||||
|
m := migrate.New(adapter.Engine, migrate.DefaultOptions, migrations)
|
||||||
|
m.Migrate()
|
||||||
|
}
|
||||||
|
|
||||||
|
func MigrateCasbinRule() *migrate.Migration {
|
||||||
|
migration := migrate.Migration{
|
||||||
|
ID: "20221015CasbinRule--fill ptype field with p",
|
||||||
|
Migrate: func(engine *xorm.Engine) error {
|
||||||
|
_, err := engine.Cols("ptype").Update(&xormadapter.CasbinRule{
|
||||||
|
Ptype: "p",
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
Rollback: func(engine *xorm.Engine) error {
|
||||||
|
return engine.DropTables(&xormadapter.CasbinRule{})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return &migration
|
||||||
|
}
|
||||||
|
|
||||||
|
func MigratePermissionRule() *migrate.Migration {
|
||||||
|
migration := migrate.Migration{
|
||||||
|
ID: "20230209MigratePermissionRule--Use V5 instead of V1 to store permissionID",
|
||||||
|
Migrate: func(engine *xorm.Engine) error {
|
||||||
|
models := []*Model{}
|
||||||
|
err := engine.Find(&models, &Model{})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
isHit := false
|
||||||
|
for _, model := range models {
|
||||||
|
if strings.Contains(model.ModelText, "permission") {
|
||||||
|
// update model table
|
||||||
|
model.ModelText = strings.Replace(model.ModelText, "permission,", "", -1)
|
||||||
|
UpdateModel(model.GetId(), model)
|
||||||
|
isHit = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isHit {
|
||||||
|
// update permission_rule table
|
||||||
|
sql := "UPDATE `permission_rule`SET V0 = V1, V1 = V2, V2 = V3, V3 = V4, V4 = V5 WHERE V0 IN (SELECT CONCAT(owner, '/', name) AS permission_id FROM `permission`)"
|
||||||
|
_, err = engine.Exec(sql)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return &migration
|
||||||
|
}
|
@ -16,7 +16,6 @@ package object
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
"xorm.io/core"
|
"xorm.io/core"
|
||||||
@ -269,33 +268,6 @@ func GetPermissionsBySubmitter(owner string, submitter string) []*Permission {
|
|||||||
return permissions
|
return permissions
|
||||||
}
|
}
|
||||||
|
|
||||||
func MigratePermissionRule() {
|
|
||||||
models := []*Model{}
|
|
||||||
err := adapter.Engine.Find(&models, &Model{})
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
isHit := false
|
|
||||||
for _, model := range models {
|
|
||||||
if strings.Contains(model.ModelText, "permission") {
|
|
||||||
// update model table
|
|
||||||
model.ModelText = strings.Replace(model.ModelText, "permission,", "", -1)
|
|
||||||
UpdateModel(model.GetId(), model)
|
|
||||||
isHit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if isHit {
|
|
||||||
// update permission_rule table
|
|
||||||
sql := "UPDATE `permission_rule`SET V0 = V1, V1 = V2, V2 = V3, V3 = V4, V4 = V5 WHERE V0 IN (SELECT CONCAT(owner, '/', name) AS permission_id FROM `permission`)"
|
|
||||||
_, err = adapter.Engine.Exec(sql)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func ContainsAsterisk(userId string, users []string) bool {
|
func ContainsAsterisk(userId string, users []string) bool {
|
||||||
containsAsterisk := false
|
containsAsterisk := false
|
||||||
group, _ := util.GetOwnerAndNameFromId(userId)
|
group, _ := util.GetOwnerAndNameFromId(userId)
|
||||||
|
Reference in New Issue
Block a user