From 0395b7e1a93924515ee69b765d159cc7044ebaf0 Mon Sep 17 00:00:00 2001 From: Yixiang Zhao Date: Sat, 3 Sep 2022 16:45:58 +0800 Subject: [PATCH] feat: migrate permission data (#1083) Signed-off-by: Yixiang Zhao Signed-off-by: Yixiang Zhao Co-authored-by: Yang Luo --- object/init.go | 2 ++ object/permission.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/object/init.go b/object/init.go index ddea800a..82df37fd 100644 --- a/object/init.go +++ b/object/init.go @@ -25,6 +25,8 @@ import ( ) func InitDb() { + MigratePermissionRule() + existed := initBuiltInOrganization() if !existed { initBuiltInModel() diff --git a/object/permission.go b/object/permission.go index 29506321..08bf5bbb 100644 --- a/object/permission.go +++ b/object/permission.go @@ -16,6 +16,7 @@ package object import ( "fmt" + "strings" "github.com/casdoor/casdoor/util" "xorm.io/core" @@ -208,6 +209,33 @@ func GetPermissionsBySubmitter(owner string, submitter string) []*Permission { 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 { containsAsterisk := false group, _ := util.GetOwnerAndNameFromId(userId)