From 463fa8b6366d000b2c59f26b20866301a49855ec Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 19 Aug 2023 16:52:57 +0800 Subject: [PATCH] Add ormer_session.go --- main.go | 2 + object/ormer.go | 90 +++++--------------------------------- object/ormer_session.go | 96 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 79 deletions(-) create mode 100644 object/ormer_session.go diff --git a/main.go b/main.go index b11fa101..93ee30b9 100644 --- a/main.go +++ b/main.go @@ -26,9 +26,11 @@ import ( "github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/routers" + "github.com/casdoor/casdoor/util" ) func main() { + object.InitFlag() object.InitAdapter() object.CreateTables() object.DoMigration() diff --git a/object/ormer.go b/object/ormer.go index 10accff6..205f04e0 100644 --- a/object/ormer.go +++ b/object/ormer.go @@ -23,7 +23,6 @@ import ( "github.com/beego/beego" "github.com/casdoor/casdoor/conf" - "github.com/casdoor/casdoor/util" xormadapter "github.com/casdoor/xorm-adapter/v3" _ "github.com/denisenkom/go-mssqldb" // db = mssql _ "github.com/go-sql-driver/mysql" // db = mysql @@ -33,15 +32,21 @@ import ( _ "modernc.org/sqlite" // db = sqlite ) -var ormer *Ormer -var createDatabase = true +var ( + ormer *Ormer = nil + isCreateDatabaseDefined = false + createDatabase = true +) -func init() { - createDatabase = getCreateDatabaseFlag() +func InitFlag() { + if !isCreateDatabaseDefined { + isCreateDatabaseDefined = true + createDatabase = getCreateDatabaseFlag() + } } func getCreateDatabaseFlag() bool { - res := flag.Bool("createDatabase", false, "true if you need Casdoor to create database") + res := flag.Bool("createDatabase", false, "true if you need to create database") flag.Parse() return *res } @@ -306,76 +311,3 @@ func (a *Ormer) createTable() { panic(err) } } - -func GetSession(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session { - session := ormer.Engine.Prepare() - if offset != -1 && limit != -1 { - session.Limit(limit, offset) - } - if owner != "" { - session = session.And("owner=?", owner) - } - if field != "" && value != "" { - if util.FilterField(field) { - session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value)) - } - } - if sortField == "" || sortOrder == "" { - sortField = "created_time" - } - if sortOrder == "ascend" { - session = session.Asc(util.SnakeString(sortField)) - } else { - session = session.Desc(util.SnakeString(sortField)) - } - return session -} - -func GetSessionForUser(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session { - session := ormer.Engine.Prepare() - if offset != -1 && limit != -1 { - session.Limit(limit, offset) - } - if owner != "" { - if offset == -1 { - session = session.And("owner=?", owner) - } else { - session = session.And("a.owner=?", owner) - } - } - if field != "" && value != "" { - if util.FilterField(field) { - if offset != -1 { - field = fmt.Sprintf("a.%s", field) - } - session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value)) - } - } - if sortField == "" || sortOrder == "" { - sortField = "created_time" - } - - tableNamePrefix := conf.GetConfigString("tableNamePrefix") - tableName := tableNamePrefix + "user" - if offset == -1 { - if sortOrder == "ascend" { - session = session.Asc(util.SnakeString(sortField)) - } else { - session = session.Desc(util.SnakeString(sortField)) - } - } else { - if sortOrder == "ascend" { - session = session.Alias("a"). - Join("INNER", []string{tableName, "b"}, "a.owner = b.owner and a.name = b.name"). - Select("b.*"). - Asc("a." + util.SnakeString(sortField)) - } else { - session = session.Alias("a"). - Join("INNER", []string{tableName, "b"}, "a.owner = b.owner and a.name = b.name"). - Select("b.*"). - Desc("a." + util.SnakeString(sortField)) - } - } - - return session -} diff --git a/object/ormer_session.go b/object/ormer_session.go new file mode 100644 index 00000000..6597c2e0 --- /dev/null +++ b/object/ormer_session.go @@ -0,0 +1,96 @@ +// 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 + +import ( + "fmt" + + "github.com/casdoor/casdoor/conf" + "github.com/casdoor/casdoor/util" + "github.com/xorm-io/xorm" +) + +func GetSession(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session { + session := ormer.Engine.Prepare() + if offset != -1 && limit != -1 { + session.Limit(limit, offset) + } + if owner != "" { + session = session.And("owner=?", owner) + } + if field != "" && value != "" { + if util.FilterField(field) { + session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value)) + } + } + if sortField == "" || sortOrder == "" { + sortField = "created_time" + } + if sortOrder == "ascend" { + session = session.Asc(util.SnakeString(sortField)) + } else { + session = session.Desc(util.SnakeString(sortField)) + } + return session +} + +func GetSessionForUser(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session { + session := ormer.Engine.Prepare() + if offset != -1 && limit != -1 { + session.Limit(limit, offset) + } + if owner != "" { + if offset == -1 { + session = session.And("owner=?", owner) + } else { + session = session.And("a.owner=?", owner) + } + } + if field != "" && value != "" { + if util.FilterField(field) { + if offset != -1 { + field = fmt.Sprintf("a.%s", field) + } + session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value)) + } + } + if sortField == "" || sortOrder == "" { + sortField = "created_time" + } + + tableNamePrefix := conf.GetConfigString("tableNamePrefix") + tableName := tableNamePrefix + "user" + if offset == -1 { + if sortOrder == "ascend" { + session = session.Asc(util.SnakeString(sortField)) + } else { + session = session.Desc(util.SnakeString(sortField)) + } + } else { + if sortOrder == "ascend" { + session = session.Alias("a"). + Join("INNER", []string{tableName, "b"}, "a.owner = b.owner and a.name = b.name"). + Select("b.*"). + Asc("a." + util.SnakeString(sortField)) + } else { + session = session.Alias("a"). + Join("INNER", []string{tableName, "b"}, "a.owner = b.owner and a.name = b.name"). + Select("b.*"). + Desc("a." + util.SnakeString(sortField)) + } + } + + return session +}