From ea10f8e615084e7ab187047331b753e6a86de5da Mon Sep 17 00:00:00 2001
From: Yaodong Yu <2814461814@qq.com>
Date: Sat, 29 Jul 2023 15:07:04 +0800
Subject: [PATCH] feat: make hard-coded authz adapter editable, rename adapter
to ormer (#2149)
* refactor: rename casbinAdapter to casdoorAdapter
* feat: add initEnforcer
* fix: router
* refactor: make hard-coded code configurable
* fix: data type
* feat: support sqlite3
* feat: disable delete and edit name for built in resources
* feat: optimize code
* fix: init
* fix: e2e
* fix: remove datasourcename
* fix: revert rename
* refactor: change all ORM's Adatper to Ormer
* refactor: name
---
authz/authz.go | 40 +-
controllers/{casbin_adapter.go => adapter.go} | 64 +-
main.go | 4 +-
object/adapter.go | 631 +++++++++---------
object/application.go | 20 +-
object/casbin_adapter.go | 313 ---------
object/cert.go | 16 +-
object/chat.go | 10 +-
object/enforcer.go | 54 +-
object/group.go | 28 +-
object/init.go | 170 ++++-
object/ldap.go | 12 +-
object/ldap_autosync.go | 4 +-
object/ldap_conn.go | 4 +-
object/message.go | 14 +-
object/migrator.go | 2 +-
object/migrator_1_101_0_PR_1083.go | 6 +-
object/migrator_1_235_0_PR_1530.go | 2 +-
object/migrator_1_240_0_PR_1539.go | 4 +-
object/migrator_1_314_0_PR_1841.go | 2 +-
object/model.go | 24 +-
object/organization.go | 28 +-
object/ormer.go | 379 +++++++++++
object/payment.go | 12 +-
object/permission.go | 32 +-
object/permission_enforcer.go | 6 +-
object/plan.go | 10 +-
object/pricing.go | 10 +-
object/product.go | 10 +-
object/provider.go | 20 +-
object/record.go | 6 +-
object/resource.go | 10 +-
object/role.go | 22 +-
object/session.go | 12 +-
object/subscription.go | 10 +-
object/syncer.go | 16 +-
object/syncer_affiliation.go | 2 +-
object/syncer_user.go | 12 +-
object/syncer_util.go | 4 +-
object/token.go | 24 +-
object/user.go | 42 +-
object/user_test.go | 2 +-
object/user_util.go | 8 +-
object/verification.go | 8 +-
object/webhook.go | 12 +-
routers/authz_filter.go | 2 +-
routers/router.go | 34 +-
swagger/swagger.json | 10 +-
swagger/swagger.yml | 10 +-
web/src/AdapterEditPage.js | 128 ++--
web/src/AdapterListPage.js | 3 +-
web/src/EnforcerEditPage.js | 12 +-
web/src/EnforcerListPage.js | 1 +
web/src/ModelEditPage.js | 7 +-
web/src/ModelListPage.js | 1 +
web/src/Setting.js | 16 +
56 files changed, 1314 insertions(+), 1031 deletions(-)
rename controllers/{casbin_adapter.go => adapter.go} (76%)
delete mode 100644 object/casbin_adapter.go
create mode 100644 object/ormer.go
diff --git a/authz/authz.go b/authz/authz.go
index aefd4b87..7110181e 100644
--- a/authz/authz.go
+++ b/authz/authz.go
@@ -18,56 +18,22 @@ import (
"strings"
"github.com/casbin/casbin/v2"
- "github.com/casbin/casbin/v2/model"
"github.com/casdoor/casdoor/conf"
"github.com/casdoor/casdoor/object"
"github.com/casdoor/casdoor/util"
- xormadapter "github.com/casdoor/xorm-adapter/v3"
stringadapter "github.com/qiangmzsx/string-adapter/v2"
)
var Enforcer *casbin.Enforcer
-func InitAuthz() {
+func InitApi() {
var err error
- tableNamePrefix := conf.GetConfigString("tableNamePrefix")
- driverName := conf.GetConfigString("driverName")
- dataSourceName := conf.GetConfigRealDataSourceName(driverName)
- a, err := xormadapter.NewAdapterWithTableName(driverName, dataSourceName, "casbin_rule", tableNamePrefix, true)
+ e, err := object.GetEnforcer(util.GetId("built-in", "api-enforcer-built-in"))
if err != nil {
panic(err)
}
-
- modelText := `
-[request_definition]
-r = subOwner, subName, method, urlPath, objOwner, objName
-
-[policy_definition]
-p = subOwner, subName, method, urlPath, objOwner, objName
-
-[role_definition]
-g = _, _
-
-[policy_effect]
-e = some(where (p.eft == allow))
-
-[matchers]
-m = (r.subOwner == p.subOwner || p.subOwner == "*") && \
- (r.subName == p.subName || p.subName == "*" || r.subName != "anonymous" && p.subName == "!anonymous") && \
- (r.method == p.method || p.method == "*") && \
- (r.urlPath == p.urlPath || p.urlPath == "*") && \
- (r.objOwner == p.objOwner || p.objOwner == "*") && \
- (r.objName == p.objName || p.objName == "*") || \
- (r.subOwner == r.objOwner && r.subName == r.objName)
-`
-
- m, err := model.NewModelFromString(modelText)
- if err != nil {
- panic(err)
- }
-
- Enforcer, err = casbin.NewEnforcer(m, a)
+ Enforcer, err = e.InitEnforcer()
if err != nil {
panic(err)
}
diff --git a/controllers/casbin_adapter.go b/controllers/adapter.go
similarity index 76%
rename from controllers/casbin_adapter.go
rename to controllers/adapter.go
index 427803c3..7e255fde 100644
--- a/controllers/casbin_adapter.go
+++ b/controllers/adapter.go
@@ -23,14 +23,14 @@ import (
xormadapter "github.com/casdoor/xorm-adapter/v3"
)
-// GetCasbinAdapters
-// @Title GetCasbinAdapters
+// GetAdapters
+// @Title GetAdapters
// @Tag Adapter API
// @Description get adapters
// @Param owner query string true "The owner of adapters"
// @Success 200 {array} object.Adapter The Response object
// @router /get-adapters [get]
-func (c *ApiController) GetCasbinAdapters() {
+func (c *ApiController) GetAdapters() {
owner := c.Input().Get("owner")
limit := c.Input().Get("pageSize")
page := c.Input().Get("p")
@@ -40,7 +40,7 @@ func (c *ApiController) GetCasbinAdapters() {
sortOrder := c.Input().Get("sortOrder")
if limit == "" || page == "" {
- adapters, err := object.GetCasbinAdapters(owner)
+ adapters, err := object.GetAdapters(owner)
if err != nil {
c.ResponseError(err.Error())
return
@@ -49,14 +49,14 @@ func (c *ApiController) GetCasbinAdapters() {
c.ResponseOk(adapters)
} else {
limit := util.ParseInt(limit)
- count, err := object.GetCasbinAdapterCount(owner, field, value)
+ count, err := object.GetAdapterCount(owner, field, value)
if err != nil {
c.ResponseError(err.Error())
return
}
paginator := pagination.SetPaginator(c.Ctx, limit, count)
- adapters, err := object.GetPaginationCasbinAdapters(owner, paginator.Offset(), limit, field, value, sortField, sortOrder)
+ adapters, err := object.GetPaginationAdapters(owner, paginator.Offset(), limit, field, value, sortField, sortOrder)
if err != nil {
c.ResponseError(err.Error())
return
@@ -66,17 +66,17 @@ func (c *ApiController) GetCasbinAdapters() {
}
}
-// GetCasbinAdapter
-// @Title GetCasbinAdapter
+// GetAdapter
+// @Title GetAdapter
// @Tag Adapter API
// @Description get adapter
// @Param id query string true "The id ( owner/name ) of the adapter"
// @Success 200 {object} object.Adapter The Response object
// @router /get-adapter [get]
-func (c *ApiController) GetCasbinAdapter() {
+func (c *ApiController) GetAdapter() {
id := c.Input().Get("id")
- adapter, err := object.GetCasbinAdapter(id)
+ adapter, err := object.GetAdapter(id)
if err != nil {
c.ResponseError(err.Error())
return
@@ -85,69 +85,69 @@ func (c *ApiController) GetCasbinAdapter() {
c.ResponseOk(adapter)
}
-// UpdateCasbinAdapter
-// @Title UpdateCasbinAdapter
+// UpdateAdapter
+// @Title UpdateAdapter
// @Tag Adapter API
// @Description update adapter
// @Param id query string true "The id ( owner/name ) of the adapter"
// @Param body body object.Adapter true "The details of the adapter"
// @Success 200 {object} controllers.Response The Response object
// @router /update-adapter [post]
-func (c *ApiController) UpdateCasbinAdapter() {
+func (c *ApiController) UpdateAdapter() {
id := c.Input().Get("id")
- var casbinAdapter object.CasbinAdapter
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &casbinAdapter)
+ var adapter object.Adapter
+ err := json.Unmarshal(c.Ctx.Input.RequestBody, &adapter)
if err != nil {
c.ResponseError(err.Error())
return
}
- c.Data["json"] = wrapActionResponse(object.UpdateCasbinAdapter(id, &casbinAdapter))
+ c.Data["json"] = wrapActionResponse(object.UpdateAdapter(id, &adapter))
c.ServeJSON()
}
-// AddCasbinAdapter
-// @Title AddCasbinAdapter
+// AddAdapter
+// @Title AddAdapter
// @Tag Adapter API
// @Description add adapter
// @Param body body object.Adapter true "The details of the adapter"
// @Success 200 {object} controllers.Response The Response object
// @router /add-adapter [post]
-func (c *ApiController) AddCasbinAdapter() {
- var casbinAdapter object.CasbinAdapter
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &casbinAdapter)
+func (c *ApiController) AddAdapter() {
+ var adapter object.Adapter
+ err := json.Unmarshal(c.Ctx.Input.RequestBody, &adapter)
if err != nil {
c.ResponseError(err.Error())
return
}
- c.Data["json"] = wrapActionResponse(object.AddCasbinAdapter(&casbinAdapter))
+ c.Data["json"] = wrapActionResponse(object.AddAdapter(&adapter))
c.ServeJSON()
}
-// DeleteCasbinAdapter
-// @Title DeleteCasbinAdapter
+// DeleteAdapter
+// @Title DeleteAdapter
// @Tag Adapter API
// @Description delete adapter
// @Param body body object.Adapter true "The details of the adapter"
// @Success 200 {object} controllers.Response The Response object
// @router /delete-adapter [post]
-func (c *ApiController) DeleteCasbinAdapter() {
- var casbinAdapter object.CasbinAdapter
- err := json.Unmarshal(c.Ctx.Input.RequestBody, &casbinAdapter)
+func (c *ApiController) DeleteAdapter() {
+ var adapter object.Adapter
+ err := json.Unmarshal(c.Ctx.Input.RequestBody, &adapter)
if err != nil {
c.ResponseError(err.Error())
return
}
- c.Data["json"] = wrapActionResponse(object.DeleteCasbinAdapter(&casbinAdapter))
+ c.Data["json"] = wrapActionResponse(object.DeleteAdapter(&adapter))
c.ServeJSON()
}
func (c *ApiController) SyncPolicies() {
id := c.Input().Get("id")
- adapter, err := object.GetCasbinAdapter(id)
+ adapter, err := object.GetAdapter(id)
if err != nil {
c.ResponseError(err.Error())
return
@@ -164,7 +164,7 @@ func (c *ApiController) SyncPolicies() {
func (c *ApiController) UpdatePolicy() {
id := c.Input().Get("id")
- adapter, err := object.GetCasbinAdapter(id)
+ adapter, err := object.GetAdapter(id)
if err != nil {
c.ResponseError(err.Error())
return
@@ -188,7 +188,7 @@ func (c *ApiController) UpdatePolicy() {
func (c *ApiController) AddPolicy() {
id := c.Input().Get("id")
- adapter, err := object.GetCasbinAdapter(id)
+ adapter, err := object.GetAdapter(id)
if err != nil {
c.ResponseError(err.Error())
return
@@ -212,7 +212,7 @@ func (c *ApiController) AddPolicy() {
func (c *ApiController) RemovePolicy() {
id := c.Input().Get("id")
- adapter, err := object.GetCasbinAdapter(id)
+ adapter, err := object.GetAdapter(id)
if err != nil {
c.ResponseError(err.Error())
return
diff --git a/main.go b/main.go
index 20aeda99..07bbc5a9 100644
--- a/main.go
+++ b/main.go
@@ -48,7 +48,7 @@ func main() {
object.InitDefaultStorageProvider()
object.InitLdapAutoSynchronizer()
proxy.InitHttpClient()
- authz.InitAuthz()
+ authz.InitApi()
util.SafeGoroutine(func() { object.RunSyncUsersJob() })
@@ -62,7 +62,7 @@ func main() {
beego.InsertFilter("*", beego.BeforeRouter, routers.StaticFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.AutoSigninFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.CorsFilter)
- beego.InsertFilter("*", beego.BeforeRouter, routers.AuthzFilter)
+ beego.InsertFilter("*", beego.BeforeRouter, routers.ApiFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.PrometheusFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.RecordMessage)
diff --git a/object/adapter.go b/object/adapter.go
index a79b6f12..8cea6016 100644
--- a/object/adapter.go
+++ b/object/adapter.go
@@ -1,4 +1,4 @@
-// Copyright 2021 The Casdoor Authors. All Rights Reserved.
+// Copyright 2022 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.
@@ -15,365 +15,352 @@
package object
import (
- "database/sql"
"fmt"
- "runtime"
"strings"
- "github.com/beego/beego"
+ "github.com/casbin/casbin/v2"
+ "github.com/casbin/casbin/v2/model"
"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
- _ "github.com/lib/pq" // db = postgres
"github.com/xorm-io/core"
- "github.com/xorm-io/xorm"
- _ "modernc.org/sqlite" // db = sqlite
)
-var adapter *Adapter
-
-func InitConfig() {
- err := beego.LoadAppConfig("ini", "../conf/app.conf")
- if err != nil {
- panic(err)
- }
-
- beego.BConfig.WebConfig.Session.SessionOn = true
-
- InitAdapter(true)
- CreateTables(true)
- DoMigration()
-}
-
-func InitAdapter(createDatabase bool) {
- if createDatabase {
- err := createDatabaseForPostgres(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
- if err != nil {
- panic(err)
- }
- }
-
- adapter = NewAdapter(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
-
- tableNamePrefix := conf.GetConfigString("tableNamePrefix")
- tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, tableNamePrefix)
- adapter.Engine.SetTableMapper(tbMapper)
-}
-
-func CreateTables(createDatabase bool) {
- if createDatabase {
- err := adapter.CreateDatabase()
- if err != nil {
- panic(err)
- }
- }
-
- adapter.createTable()
-}
-
-// Adapter represents the MySQL adapter for policy storage.
type Adapter struct {
- driverName string
- dataSourceName string
- dbName string
- Engine *xorm.Engine
+ Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
+ Name string `xorm:"varchar(100) notnull pk" json:"name"`
+ CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
+
+ Type string `xorm:"varchar(100)" json:"type"`
+ Model string `xorm:"varchar(100)" json:"model"`
+
+ DatabaseType string `xorm:"varchar(100)" json:"databaseType"`
+ Host string `xorm:"varchar(100)" json:"host"`
+ Port string `xorm:"varchar(20)" json:"port"`
+ User string `xorm:"varchar(100)" json:"user"`
+ Password string `xorm:"varchar(100)" json:"password"`
+ Database string `xorm:"varchar(100)" json:"database"`
+ Table string `xorm:"varchar(100)" json:"table"`
+ TableNamePrefix string `xorm:"varchar(100)" json:"tableNamePrefix"`
+ File string `xorm:"varchar(100)" json:"file"`
+
+ IsEnabled bool `json:"isEnabled"`
+
+ Adapter *xormadapter.Adapter `xorm:"-" json:"-"`
}
-// finalizer is the destructor for Adapter.
-func finalizer(a *Adapter) {
- err := a.Engine.Close()
+func GetAdapterCount(owner, field, value string) (int64, error) {
+ session := GetSession(owner, -1, -1, field, value, "", "")
+ return session.Count(&Adapter{})
+}
+
+func GetAdapters(owner string) ([]*Adapter, error) {
+ adapters := []*Adapter{}
+ err := ormer.Engine.Desc("created_time").Find(&adapters, &Adapter{Owner: owner})
if err != nil {
- panic(err)
+ return adapters, err
+ }
+
+ return adapters, nil
+}
+
+func GetPaginationAdapters(owner string, offset, limit int, field, value, sortField, sortOrder string) ([]*Adapter, error) {
+ adapters := []*Adapter{}
+ session := GetSession(owner, offset, limit, field, value, sortField, sortOrder)
+ err := session.Find(&adapters)
+ if err != nil {
+ return adapters, err
+ }
+
+ return adapters, nil
+}
+
+func getAdapter(owner, name string) (*Adapter, error) {
+ if owner == "" || name == "" {
+ return nil, nil
+ }
+
+ adapter := Adapter{Owner: owner, Name: name}
+ existed, err := ormer.Engine.Get(&adapter)
+ if err != nil {
+ return nil, err
+ }
+
+ if existed {
+ return &adapter, nil
+ } else {
+ return nil, nil
}
}
-// NewAdapter is the constructor for Adapter.
-func NewAdapter(driverName string, dataSourceName string, dbName string) *Adapter {
- a := &Adapter{}
- a.driverName = driverName
- a.dataSourceName = dataSourceName
- a.dbName = dbName
-
- // Open the DB, create it if not existed.
- a.open()
-
- // Call the destructor when the object is released.
- runtime.SetFinalizer(a, finalizer)
-
- return a
+func GetAdapter(id string) (*Adapter, error) {
+ owner, name := util.GetOwnerAndNameFromId(id)
+ return getAdapter(owner, name)
}
-func createDatabaseForPostgres(driverName string, dataSourceName string, dbName string) error {
- if driverName == "postgres" {
- db, err := sql.Open(driverName, dataSourceName)
- if err != nil {
- return err
- }
- defer db.Close()
+func UpdateAdapter(id string, adapter *Adapter) (bool, error) {
+ owner, name := util.GetOwnerAndNameFromId(id)
+ if adapter, err := getAdapter(owner, name); adapter == nil {
+ return false, err
+ }
- _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s;", dbName))
+ if name != adapter.Name {
+ err := adapterChangeTrigger(name, adapter.Name)
if err != nil {
- if !strings.Contains(err.Error(), "already exists") {
- return err
+ return false, err
+ }
+ }
+
+ session := ormer.Engine.ID(core.PK{owner, name}).AllCols()
+ if adapter.Password == "***" {
+ session.Omit("password")
+ }
+ affected, err := session.Update(adapter)
+ if err != nil {
+ return false, err
+ }
+
+ return affected != 0, nil
+}
+
+func AddAdapter(adapter *Adapter) (bool, error) {
+ affected, err := ormer.Engine.Insert(adapter)
+ if err != nil {
+ return false, err
+ }
+
+ return affected != 0, nil
+}
+
+func DeleteAdapter(adapter *Adapter) (bool, error) {
+ affected, err := ormer.Engine.ID(core.PK{adapter.Owner, adapter.Name}).Delete(&Adapter{})
+ if err != nil {
+ return false, err
+ }
+
+ return affected != 0, nil
+}
+
+func (adapter *Adapter) GetId() string {
+ return fmt.Sprintf("%s/%s", adapter.Owner, adapter.Name)
+}
+
+func (adapter *Adapter) getTable() string {
+ if adapter.DatabaseType == "mssql" {
+ return fmt.Sprintf("[%s]", adapter.Table)
+ } else {
+ return adapter.Table
+ }
+}
+
+func initEnforcer(modelObj *Model, adapter *Adapter) (*casbin.Enforcer, error) {
+ // init Adapter
+ if adapter.Adapter == nil {
+ var dataSourceName string
+ if adapter.DatabaseType == "mssql" {
+ dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s", adapter.User, adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ } else if adapter.DatabaseType == "postgres" {
+ dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%s sslmode=disable dbname=%s", adapter.User, adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ } else {
+ dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%s)/", adapter.User, adapter.Password, adapter.Host, adapter.Port)
+ }
+
+ if !isCloudIntranet {
+ dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
+ }
+
+ var err error
+ adapter.Adapter, err = xormadapter.NewAdapterByEngineWithTableName(NewAdapter(adapter.DatabaseType, dataSourceName, adapter.Database).Engine, adapter.getTable(), "")
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // init Model
+ m, err := model.NewModelFromString(modelObj.ModelText)
+ if err != nil {
+ return nil, err
+ }
+
+ // init Enforcer
+ enforcer, err := casbin.NewEnforcer(m, adapter.Adapter)
+ if err != nil {
+ return nil, err
+ }
+
+ return enforcer, nil
+}
+
+func (adapter *Adapter) initAdapter() (*xormadapter.Adapter, error) {
+ // init Adapter
+ if adapter.Adapter == nil {
+ var dataSourceName string
+
+ if adapter.buildInAdapter() {
+ dataSourceName = conf.GetConfigString("dataSourceName")
+ } else {
+ switch adapter.DatabaseType {
+ case "mssql":
+ dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s", adapter.User,
+ adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ case "mysql":
+ dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%s)/", adapter.User,
+ adapter.Password, adapter.Host, adapter.Port)
+ case "postgres":
+ dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%s sslmode=disable dbname=%s", adapter.User,
+ adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ case "CockroachDB":
+ dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%s sslmode=disable dbname=%s serial_normalization=virtual_sequence",
+ adapter.User, adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ case "sqlite3":
+ dataSourceName = fmt.Sprintf("file:%s", adapter.File)
+ default:
+ return nil, fmt.Errorf("unsupported database type: %s", adapter.DatabaseType)
}
}
- return nil
- } else {
- return nil
+ if !isCloudIntranet {
+ dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
+ }
+
+ var err error
+ adapter.Adapter, err = xormadapter.NewAdapterByEngineWithTableName(NewAdapter(adapter.DatabaseType, dataSourceName, adapter.Database).Engine, adapter.getTable(), adapter.TableNamePrefix)
+ if err != nil {
+ return nil, err
+ }
}
+ return adapter.Adapter, nil
}
-func (a *Adapter) CreateDatabase() error {
- if a.driverName == "postgres" {
- return nil
- }
+func adapterChangeTrigger(oldName string, newName string) error {
+ session := ormer.Engine.NewSession()
+ defer session.Close()
- engine, err := xorm.NewEngine(a.driverName, a.dataSourceName)
+ err := session.Begin()
if err != nil {
return err
}
- defer engine.Close()
- _, err = engine.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s default charset utf8mb4 COLLATE utf8mb4_general_ci", a.dbName))
- return err
+ enforcer := new(Enforcer)
+ enforcer.Adapter = newName
+ _, err = session.Where("adapter=?", oldName).Update(enforcer)
+ if err != nil {
+ session.Rollback()
+ return err
+ }
+
+ return session.Commit()
}
-func (a *Adapter) open() {
- dataSourceName := a.dataSourceName + a.dbName
- if a.driverName != "mysql" {
- dataSourceName = a.dataSourceName
- }
-
- engine, err := xorm.NewEngine(a.driverName, dataSourceName)
- if err != nil {
- panic(err)
- }
-
- a.Engine = engine
-}
-
-func (a *Adapter) close() {
- _ = a.Engine.Close()
- a.Engine = nil
-}
-
-func (a *Adapter) createTable() {
- showSql := conf.GetConfigBool("showSql")
- a.Engine.ShowSQL(showSql)
-
- err := a.Engine.Sync2(new(Organization))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(User))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Group))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Role))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Permission))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Model))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(CasbinAdapter))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Enforcer))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Provider))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Application))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Resource))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Token))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(VerificationRecord))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Record))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Webhook))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Syncer))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Cert))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Chat))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Message))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Product))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Payment))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Ldap))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(PermissionRule))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(xormadapter.CasbinRule))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Session))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Subscription))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Plan))
- if err != nil {
- panic(err)
- }
-
- err = a.Engine.Sync2(new(Pricing))
- if err != nil {
- panic(err)
- }
-}
-
-func GetSession(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session {
- session := adapter.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))
+func safeReturn(policy []string, i int) string {
+ if len(policy) > i {
+ return policy[i]
} else {
- session = session.Desc(util.SnakeString(sortField))
+ return ""
}
- return session
}
-func GetSessionForUser(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session {
- session := adapter.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)
+func matrixToCasbinRules(Ptype string, policies [][]string) []*xormadapter.CasbinRule {
+ res := []*xormadapter.CasbinRule{}
+
+ for _, policy := range policies {
+ line := xormadapter.CasbinRule{
+ Ptype: Ptype,
+ V0: safeReturn(policy, 0),
+ V1: safeReturn(policy, 1),
+ V2: safeReturn(policy, 2),
+ V3: safeReturn(policy, 3),
+ V4: safeReturn(policy, 4),
+ V5: safeReturn(policy, 5),
}
- }
- 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"
+ res = append(res, &line)
}
- 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
+ return res
+}
+
+func SyncPolicies(adapter *Adapter) ([]*xormadapter.CasbinRule, error) {
+ modelObj, err := getModel(adapter.Owner, adapter.Model)
+ if err != nil {
+ return nil, err
+ }
+
+ if modelObj == nil {
+ return nil, fmt.Errorf("The model: %s does not exist", util.GetId(adapter.Owner, adapter.Model))
+ }
+
+ enforcer, err := initEnforcer(modelObj, adapter)
+ if err != nil {
+ return nil, err
+ }
+
+ policies := matrixToCasbinRules("p", enforcer.GetPolicy())
+ if strings.Contains(modelObj.ModelText, "[role_definition]") {
+ policies = append(policies, matrixToCasbinRules("g", enforcer.GetGroupingPolicy())...)
+ }
+
+ return policies, nil
+}
+
+func UpdatePolicy(oldPolicy, newPolicy []string, adapter *Adapter) (bool, error) {
+ modelObj, err := getModel(adapter.Owner, adapter.Model)
+ if err != nil {
+ return false, err
+ }
+
+ enforcer, err := initEnforcer(modelObj, adapter)
+ if err != nil {
+ return false, err
+ }
+
+ affected, err := enforcer.UpdatePolicy(oldPolicy, newPolicy)
+ if err != nil {
+ return affected, err
+ }
+ return affected, nil
+}
+
+func AddPolicy(policy []string, adapter *Adapter) (bool, error) {
+ modelObj, err := getModel(adapter.Owner, adapter.Model)
+ if err != nil {
+ return false, err
+ }
+
+ enforcer, err := initEnforcer(modelObj, adapter)
+ if err != nil {
+ return false, err
+ }
+
+ affected, err := enforcer.AddPolicy(policy)
+ if err != nil {
+ return affected, err
+ }
+ return affected, nil
+}
+
+func RemovePolicy(policy []string, adapter *Adapter) (bool, error) {
+ modelObj, err := getModel(adapter.Owner, adapter.Model)
+ if err != nil {
+ return false, err
+ }
+
+ enforcer, err := initEnforcer(modelObj, adapter)
+ if err != nil {
+ return false, err
+ }
+
+ affected, err := enforcer.RemovePolicy(policy)
+ if err != nil {
+ return affected, err
+ }
+
+ return affected, nil
+}
+
+func (adapter *Adapter) buildInAdapter() bool {
+ if adapter.Owner != "built-in" {
+ return false
+ }
+
+ return adapter.Name == "permission-adapter-built-in" || adapter.Name == "api-adapter-built-in"
}
diff --git a/object/application.go b/object/application.go
index 3fcb397d..1e294cf7 100644
--- a/object/application.go
+++ b/object/application.go
@@ -92,7 +92,7 @@ func GetOrganizationApplicationCount(owner, Organization, field, value string) (
func GetApplications(owner string) ([]*Application, error) {
applications := []*Application{}
- err := adapter.Engine.Desc("created_time").Find(&applications, &Application{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&applications, &Application{Owner: owner})
if err != nil {
return applications, err
}
@@ -102,7 +102,7 @@ func GetApplications(owner string) ([]*Application, error) {
func GetOrganizationApplications(owner string, organization string) ([]*Application, error) {
applications := []*Application{}
- err := adapter.Engine.Desc("created_time").Find(&applications, &Application{Organization: organization})
+ err := ormer.Engine.Desc("created_time").Find(&applications, &Application{Organization: organization})
if err != nil {
return applications, err
}
@@ -182,7 +182,7 @@ func getApplication(owner string, name string) (*Application, error) {
}
application := Application{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&application)
+ existed, err := ormer.Engine.Get(&application)
if err != nil {
return nil, err
}
@@ -206,7 +206,7 @@ func getApplication(owner string, name string) (*Application, error) {
func GetApplicationByOrganizationName(organization string) (*Application, error) {
application := Application{}
- existed, err := adapter.Engine.Where("organization=?", organization).Get(&application)
+ existed, err := ormer.Engine.Where("organization=?", organization).Get(&application)
if err != nil {
return nil, nil
}
@@ -253,7 +253,7 @@ func GetApplicationByUserId(userId string) (application *Application, err error)
func GetApplicationByClientId(clientId string) (*Application, error) {
application := Application{}
- existed, err := adapter.Engine.Where("client_id=?", clientId).Get(&application)
+ existed, err := ormer.Engine.Where("client_id=?", clientId).Get(&application)
if err != nil {
return nil, err
}
@@ -356,7 +356,7 @@ func UpdateApplication(id string, application *Application) (bool, error) {
providerItem.Provider = nil
}
- session := adapter.Engine.ID(core.PK{owner, name}).AllCols()
+ session := ormer.Engine.ID(core.PK{owner, name}).AllCols()
if application.ClientSecret == "***" {
session.Omit("client_secret")
}
@@ -395,7 +395,7 @@ func AddApplication(application *Application) (bool, error) {
providerItem.Provider = nil
}
- affected, err := adapter.Engine.Insert(application)
+ affected, err := ormer.Engine.Insert(application)
if err != nil {
return false, nil
}
@@ -408,7 +408,7 @@ func DeleteApplication(application *Application) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{application.Owner, application.Name}).Delete(&Application{})
+ affected, err := ormer.Engine.ID(core.PK{application.Owner, application.Name}).Delete(&Application{})
if err != nil {
return false, err
}
@@ -484,7 +484,7 @@ func ExtendManagedAccountsWithUser(user *User) (*User, error) {
}
func applicationChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -514,7 +514,7 @@ func applicationChangeTrigger(oldName string, newName string) error {
}
var permissions []*Permission
- err = adapter.Engine.Find(&permissions)
+ err = ormer.Engine.Find(&permissions)
if err != nil {
return err
}
diff --git a/object/casbin_adapter.go b/object/casbin_adapter.go
deleted file mode 100644
index 13d95058..00000000
--- a/object/casbin_adapter.go
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright 2022 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"
- "strings"
-
- "github.com/casbin/casbin/v2"
- "github.com/casbin/casbin/v2/model"
- "github.com/casdoor/casdoor/util"
- xormadapter "github.com/casdoor/xorm-adapter/v3"
- "github.com/xorm-io/core"
-)
-
-type CasbinAdapter struct {
- Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
- Name string `xorm:"varchar(100) notnull pk" json:"name"`
- CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
-
- Type string `xorm:"varchar(100)" json:"type"`
- Model string `xorm:"varchar(100)" json:"model"`
-
- Host string `xorm:"varchar(100)" json:"host"`
- Port int `json:"port"`
- User string `xorm:"varchar(100)" json:"user"`
- Password string `xorm:"varchar(100)" json:"password"`
- DatabaseType string `xorm:"varchar(100)" json:"databaseType"`
- Database string `xorm:"varchar(100)" json:"database"`
- Table string `xorm:"varchar(100)" json:"table"`
- IsEnabled bool `json:"isEnabled"`
-
- Adapter *xormadapter.Adapter `xorm:"-" json:"-"`
-}
-
-func GetCasbinAdapterCount(owner, field, value string) (int64, error) {
- session := GetSession(owner, -1, -1, field, value, "", "")
- return session.Count(&CasbinAdapter{})
-}
-
-func GetCasbinAdapters(owner string) ([]*CasbinAdapter, error) {
- adapters := []*CasbinAdapter{}
- err := adapter.Engine.Desc("created_time").Find(&adapters, &CasbinAdapter{Owner: owner})
- if err != nil {
- return adapters, err
- }
-
- return adapters, nil
-}
-
-func GetPaginationCasbinAdapters(owner string, offset, limit int, field, value, sortField, sortOrder string) ([]*CasbinAdapter, error) {
- adapters := []*CasbinAdapter{}
- session := GetSession(owner, offset, limit, field, value, sortField, sortOrder)
- err := session.Find(&adapters)
- if err != nil {
- return adapters, err
- }
-
- return adapters, nil
-}
-
-func getCasbinAdapter(owner, name string) (*CasbinAdapter, error) {
- if owner == "" || name == "" {
- return nil, nil
- }
-
- casbinAdapter := CasbinAdapter{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&casbinAdapter)
- if err != nil {
- return nil, err
- }
-
- if existed {
- return &casbinAdapter, nil
- } else {
- return nil, nil
- }
-}
-
-func GetCasbinAdapter(id string) (*CasbinAdapter, error) {
- owner, name := util.GetOwnerAndNameFromId(id)
- return getCasbinAdapter(owner, name)
-}
-
-func UpdateCasbinAdapter(id string, casbinAdapter *CasbinAdapter) (bool, error) {
- owner, name := util.GetOwnerAndNameFromId(id)
- if casbinAdapter, err := getCasbinAdapter(owner, name); casbinAdapter == nil {
- return false, err
- }
-
- if name != casbinAdapter.Name {
- err := casbinAdapterChangeTrigger(name, casbinAdapter.Name)
- if err != nil {
- return false, err
- }
- }
-
- session := adapter.Engine.ID(core.PK{owner, name}).AllCols()
- if casbinAdapter.Password == "***" {
- session.Omit("password")
- }
- affected, err := session.Update(casbinAdapter)
- if err != nil {
- return false, err
- }
-
- return affected != 0, nil
-}
-
-func AddCasbinAdapter(casbinAdapter *CasbinAdapter) (bool, error) {
- affected, err := adapter.Engine.Insert(casbinAdapter)
- if err != nil {
- return false, err
- }
-
- return affected != 0, nil
-}
-
-func DeleteCasbinAdapter(casbinAdapter *CasbinAdapter) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{casbinAdapter.Owner, casbinAdapter.Name}).Delete(&CasbinAdapter{})
- if err != nil {
- return false, err
- }
-
- return affected != 0, nil
-}
-
-func (casbinAdapter *CasbinAdapter) GetId() string {
- return fmt.Sprintf("%s/%s", casbinAdapter.Owner, casbinAdapter.Name)
-}
-
-func (casbinAdapter *CasbinAdapter) getTable() string {
- if casbinAdapter.DatabaseType == "mssql" {
- return fmt.Sprintf("[%s]", casbinAdapter.Table)
- } else {
- return casbinAdapter.Table
- }
-}
-
-func initEnforcer(modelObj *Model, casbinAdapter *CasbinAdapter) (*casbin.Enforcer, error) {
- // init Adapter
- if casbinAdapter.Adapter == nil {
- var dataSourceName string
- if casbinAdapter.DatabaseType == "mssql" {
- dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", casbinAdapter.User, casbinAdapter.Password, casbinAdapter.Host, casbinAdapter.Port, casbinAdapter.Database)
- } else if casbinAdapter.DatabaseType == "postgres" {
- dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%d sslmode=disable dbname=%s", casbinAdapter.User, casbinAdapter.Password, casbinAdapter.Host, casbinAdapter.Port, casbinAdapter.Database)
- } else {
- dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%d)/", casbinAdapter.User, casbinAdapter.Password, casbinAdapter.Host, casbinAdapter.Port)
- }
-
- if !isCloudIntranet {
- dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
- }
-
- var err error
- casbinAdapter.Adapter, err = xormadapter.NewAdapterByEngineWithTableName(NewAdapter(casbinAdapter.DatabaseType, dataSourceName, casbinAdapter.Database).Engine, casbinAdapter.getTable(), "")
- if err != nil {
- return nil, err
- }
- }
-
- // init Model
- m, err := model.NewModelFromString(modelObj.ModelText)
- if err != nil {
- return nil, err
- }
-
- // init Enforcer
- enforcer, err := casbin.NewEnforcer(m, casbinAdapter.Adapter)
- if err != nil {
- return nil, err
- }
-
- return enforcer, nil
-}
-
-func casbinAdapterChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
- defer session.Close()
-
- err := session.Begin()
- if err != nil {
- return err
- }
-
- enforcer := new(Enforcer)
- enforcer.Adapter = newName
- _, err = session.Where("adapter=?", oldName).Update(enforcer)
- if err != nil {
- session.Rollback()
- return err
- }
-
- return session.Commit()
-}
-
-func safeReturn(policy []string, i int) string {
- if len(policy) > i {
- return policy[i]
- } else {
- return ""
- }
-}
-
-func matrixToCasbinRules(Ptype string, policies [][]string) []*xormadapter.CasbinRule {
- res := []*xormadapter.CasbinRule{}
-
- for _, policy := range policies {
- line := xormadapter.CasbinRule{
- Ptype: Ptype,
- V0: safeReturn(policy, 0),
- V1: safeReturn(policy, 1),
- V2: safeReturn(policy, 2),
- V3: safeReturn(policy, 3),
- V4: safeReturn(policy, 4),
- V5: safeReturn(policy, 5),
- }
- res = append(res, &line)
- }
-
- return res
-}
-
-func SyncPolicies(casbinAdapter *CasbinAdapter) ([]*xormadapter.CasbinRule, error) {
- modelObj, err := getModel(casbinAdapter.Owner, casbinAdapter.Model)
- if err != nil {
- return nil, err
- }
-
- if modelObj == nil {
- return nil, fmt.Errorf("The model: %s does not exist", util.GetId(casbinAdapter.Owner, casbinAdapter.Model))
- }
-
- enforcer, err := initEnforcer(modelObj, casbinAdapter)
- if err != nil {
- return nil, err
- }
-
- policies := matrixToCasbinRules("p", enforcer.GetPolicy())
- if strings.Contains(modelObj.ModelText, "[role_definition]") {
- policies = append(policies, matrixToCasbinRules("g", enforcer.GetGroupingPolicy())...)
- }
-
- return policies, nil
-}
-
-func UpdatePolicy(oldPolicy, newPolicy []string, casbinAdapter *CasbinAdapter) (bool, error) {
- modelObj, err := getModel(casbinAdapter.Owner, casbinAdapter.Model)
- if err != nil {
- return false, err
- }
-
- enforcer, err := initEnforcer(modelObj, casbinAdapter)
- if err != nil {
- return false, err
- }
-
- affected, err := enforcer.UpdatePolicy(oldPolicy, newPolicy)
- if err != nil {
- return affected, err
- }
- return affected, nil
-}
-
-func AddPolicy(policy []string, casbinAdapter *CasbinAdapter) (bool, error) {
- modelObj, err := getModel(casbinAdapter.Owner, casbinAdapter.Model)
- if err != nil {
- return false, err
- }
-
- enforcer, err := initEnforcer(modelObj, casbinAdapter)
- if err != nil {
- return false, err
- }
-
- affected, err := enforcer.AddPolicy(policy)
- if err != nil {
- return affected, err
- }
- return affected, nil
-}
-
-func RemovePolicy(policy []string, casbinAdapter *CasbinAdapter) (bool, error) {
- modelObj, err := getModel(casbinAdapter.Owner, casbinAdapter.Model)
- if err != nil {
- return false, err
- }
-
- enforcer, err := initEnforcer(modelObj, casbinAdapter)
- if err != nil {
- return false, err
- }
-
- affected, err := enforcer.RemovePolicy(policy)
- if err != nil {
- return affected, err
- }
-
- return affected, nil
-}
diff --git a/object/cert.go b/object/cert.go
index 697dc416..2852404d 100644
--- a/object/cert.go
+++ b/object/cert.go
@@ -65,7 +65,7 @@ func GetCertCount(owner, field, value string) (int64, error) {
func GetCerts(owner string) ([]*Cert, error) {
certs := []*Cert{}
- err := adapter.Engine.Where("owner = ? or owner = ? ", "admin", owner).Desc("created_time").Find(&certs, &Cert{})
+ err := ormer.Engine.Where("owner = ? or owner = ? ", "admin", owner).Desc("created_time").Find(&certs, &Cert{})
if err != nil {
return certs, err
}
@@ -91,7 +91,7 @@ func GetGlobalCertsCount(field, value string) (int64, error) {
func GetGlobleCerts() ([]*Cert, error) {
certs := []*Cert{}
- err := adapter.Engine.Desc("created_time").Find(&certs)
+ err := ormer.Engine.Desc("created_time").Find(&certs)
if err != nil {
return certs, err
}
@@ -116,7 +116,7 @@ func getCert(owner string, name string) (*Cert, error) {
}
cert := Cert{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&cert)
+ existed, err := ormer.Engine.Get(&cert)
if err != nil {
return &cert, err
}
@@ -134,7 +134,7 @@ func getCertByName(name string) (*Cert, error) {
}
cert := Cert{Name: name}
- existed, err := adapter.Engine.Get(&cert)
+ existed, err := ormer.Engine.Get(&cert)
if err != nil {
return &cert, nil
}
@@ -165,7 +165,7 @@ func UpdateCert(id string, cert *Cert) (bool, error) {
return false, nil
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(cert)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(cert)
if err != nil {
return false, err
}
@@ -180,7 +180,7 @@ func AddCert(cert *Cert) (bool, error) {
cert.PrivateKey = privateKey
}
- affected, err := adapter.Engine.Insert(cert)
+ affected, err := ormer.Engine.Insert(cert)
if err != nil {
return false, err
}
@@ -189,7 +189,7 @@ func AddCert(cert *Cert) (bool, error) {
}
func DeleteCert(cert *Cert) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{cert.Owner, cert.Name}).Delete(&Cert{})
+ affected, err := ormer.Engine.ID(core.PK{cert.Owner, cert.Name}).Delete(&Cert{})
if err != nil {
return false, err
}
@@ -214,7 +214,7 @@ func GetDefaultCert() (*Cert, error) {
}
func certChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
diff --git a/object/chat.go b/object/chat.go
index 875b0391..8b53a7f7 100644
--- a/object/chat.go
+++ b/object/chat.go
@@ -70,7 +70,7 @@ func GetChatCount(owner, field, value string) (int64, error) {
func GetChats(owner string) ([]*Chat, error) {
chats := []*Chat{}
- err := adapter.Engine.Desc("created_time").Find(&chats, &Chat{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&chats, &Chat{Owner: owner})
if err != nil {
return chats, err
}
@@ -95,7 +95,7 @@ func getChat(owner string, name string) (*Chat, error) {
}
chat := Chat{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&chat)
+ existed, err := ormer.Engine.Get(&chat)
if err != nil {
return &chat, err
}
@@ -120,7 +120,7 @@ func UpdateChat(id string, chat *Chat) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(chat)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(chat)
if err != nil {
return false, nil
}
@@ -140,7 +140,7 @@ func AddChat(chat *Chat) (bool, error) {
}
}
- affected, err := adapter.Engine.Insert(chat)
+ affected, err := ormer.Engine.Insert(chat)
if err != nil {
return false, nil
}
@@ -149,7 +149,7 @@ func AddChat(chat *Chat) (bool, error) {
}
func DeleteChat(chat *Chat) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{chat.Owner, chat.Name}).Delete(&Chat{})
+ affected, err := ormer.Engine.ID(core.PK{chat.Owner, chat.Name}).Delete(&Chat{})
if err != nil {
return false, err
}
diff --git a/object/enforcer.go b/object/enforcer.go
index d0beb6b5..abb8ce96 100644
--- a/object/enforcer.go
+++ b/object/enforcer.go
@@ -15,6 +15,8 @@
package object
import (
+ "errors"
+
"github.com/casbin/casbin/v2"
"github.com/casdoor/casdoor/util"
"github.com/xorm-io/core"
@@ -42,7 +44,7 @@ func GetEnforcerCount(owner, field, value string) (int64, error) {
func GetEnforcers(owner string) ([]*Enforcer, error) {
enforcers := []*Enforcer{}
- err := adapter.Engine.Desc("created_time").Find(&enforcers, &Enforcer{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&enforcers, &Enforcer{Owner: owner})
if err != nil {
return enforcers, err
}
@@ -67,7 +69,7 @@ func getEnforcer(owner string, name string) (*Enforcer, error) {
}
enforcer := Enforcer{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&enforcer)
+ existed, err := ormer.Engine.Get(&enforcer)
if err != nil {
return &enforcer, err
}
@@ -92,7 +94,7 @@ func UpdateEnforcer(id string, enforcer *Enforcer) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(enforcer)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(enforcer)
if err != nil {
return false, err
}
@@ -101,7 +103,7 @@ func UpdateEnforcer(id string, enforcer *Enforcer) (bool, error) {
}
func AddEnforcer(enforcer *Enforcer) (bool, error) {
- affected, err := adapter.Engine.Insert(enforcer)
+ affected, err := ormer.Engine.Insert(enforcer)
if err != nil {
return false, err
}
@@ -110,10 +112,52 @@ func AddEnforcer(enforcer *Enforcer) (bool, error) {
}
func DeleteEnforcer(enforcer *Enforcer) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{enforcer.Owner, enforcer.Name}).Delete(&Enforcer{})
+ affected, err := ormer.Engine.ID(core.PK{enforcer.Owner, enforcer.Name}).Delete(&Enforcer{})
if err != nil {
return false, err
}
return affected != 0, nil
}
+
+func (enforcer *Enforcer) InitEnforcer() (*casbin.Enforcer, error) {
+ if enforcer == nil {
+ return nil, errors.New("enforcer is nil")
+ }
+ if enforcer.Model == "" || enforcer.Adapter == "" {
+ return nil, errors.New("missing model or adapter")
+ }
+
+ var err error
+ var m *Model
+ var a *Adapter
+
+ if m, err = GetModel(enforcer.Model); err != nil {
+ return nil, err
+ } else if m == nil {
+ return nil, errors.New("model not found")
+ }
+
+ if a, err = GetAdapter(enforcer.Adapter); err != nil {
+ return nil, err
+ } else if a == nil {
+ return nil, errors.New("adapter not found")
+ }
+
+ casbinModel, err := m.initModel()
+ if err != nil {
+ return nil, err
+ }
+
+ adapter, err := a.initAdapter()
+ if err != nil {
+ return nil, err
+ }
+
+ e, err := casbin.NewEnforcer(casbinModel, adapter)
+ if err != nil {
+ return nil, err
+ }
+
+ return e, nil
+}
diff --git a/object/group.go b/object/group.go
index e852f479..770ad345 100644
--- a/object/group.go
+++ b/object/group.go
@@ -58,7 +58,7 @@ func GetGroupCount(owner, field, value string) (int64, error) {
func GetGroups(owner string) ([]*Group, error) {
groups := []*Group{}
- err := adapter.Engine.Desc("created_time").Find(&groups, &Group{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&groups, &Group{Owner: owner})
if err != nil {
return nil, err
}
@@ -83,7 +83,7 @@ func getGroup(owner string, name string) (*Group, error) {
}
group := Group{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&group)
+ existed, err := ormer.Engine.Get(&group)
if err != nil {
return nil, err
}
@@ -119,7 +119,7 @@ func UpdateGroup(id string, group *Group) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(group)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(group)
if err != nil {
return false, err
}
@@ -133,7 +133,7 @@ func AddGroup(group *Group) (bool, error) {
return false, err
}
- affected, err := adapter.Engine.Insert(group)
+ affected, err := ormer.Engine.Insert(group)
if err != nil {
return false, err
}
@@ -145,7 +145,7 @@ func AddGroups(groups []*Group) (bool, error) {
if len(groups) == 0 {
return false, nil
}
- affected, err := adapter.Engine.Insert(groups)
+ affected, err := ormer.Engine.Insert(groups)
if err != nil {
return false, err
}
@@ -153,12 +153,12 @@ func AddGroups(groups []*Group) (bool, error) {
}
func DeleteGroup(group *Group) (bool, error) {
- _, err := adapter.Engine.Get(group)
+ _, err := ormer.Engine.Get(group)
if err != nil {
return false, err
}
- if count, err := adapter.Engine.Where("parent_id = ?", group.Name).Count(&Group{}); err != nil {
+ if count, err := ormer.Engine.Where("parent_id = ?", group.Name).Count(&Group{}); err != nil {
return false, err
} else if count > 0 {
return false, errors.New("group has children group")
@@ -170,7 +170,7 @@ func DeleteGroup(group *Group) (bool, error) {
return false, errors.New("group has users")
}
- affected, err := adapter.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{})
+ affected, err := ormer.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{})
if err != nil {
return false, err
}
@@ -179,7 +179,7 @@ func DeleteGroup(group *Group) (bool, error) {
}
func checkGroupName(name string) error {
- exist, err := adapter.Engine.Exist(&Organization{Owner: "admin", Name: name})
+ exist, err := ormer.Engine.Exist(&Organization{Owner: "admin", Name: name})
if err != nil {
return err
}
@@ -233,10 +233,10 @@ func RemoveUserFromGroup(owner, name, groupName string) (bool, error) {
func GetGroupUserCount(groupName string, field, value string) (int64, error) {
if field == "" && value == "" {
- return adapter.Engine.Where(builder.Like{"`groups`", groupName}).
+ return ormer.Engine.Where(builder.Like{"`groups`", groupName}).
Count(&User{})
} else {
- return adapter.Engine.Table("user").
+ return ormer.Engine.Table("user").
Where(builder.Like{"`groups`", groupName}).
And(fmt.Sprintf("user.%s LIKE ?", util.CamelToSnakeCase(field)), "%"+value+"%").
Count()
@@ -245,7 +245,7 @@ func GetGroupUserCount(groupName string, field, value string) (int64, error) {
func GetPaginationGroupUsers(groupName string, offset, limit int, field, value, sortField, sortOrder string) ([]*User, error) {
users := []*User{}
- session := adapter.Engine.Table("user").
+ session := ormer.Engine.Table("user").
Where(builder.Like{"`groups`", groupName + "\""})
if offset != -1 && limit != -1 {
@@ -275,7 +275,7 @@ func GetPaginationGroupUsers(groupName string, offset, limit int, field, value,
func GetGroupUsers(groupName string) ([]*User, error) {
users := []*User{}
- err := adapter.Engine.Table("user").
+ err := ormer.Engine.Table("user").
Where(builder.Like{"`groups`", groupName + "\""}).
Find(&users)
if err != nil {
@@ -286,7 +286,7 @@ func GetGroupUsers(groupName string) ([]*User, error) {
}
func GroupChangeTrigger(oldName, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
if err != nil {
diff --git a/object/init.go b/object/init.go
index e538ecd6..1f984154 100644
--- a/object/init.go
+++ b/object/init.go
@@ -27,7 +27,6 @@ import (
func InitDb() {
existed := initBuiltInOrganization()
if !existed {
- initBuiltInModel()
initBuiltInPermission()
initBuiltInProvider()
initBuiltInUser()
@@ -36,6 +35,15 @@ func InitDb() {
initBuiltInLdap()
}
+ existed = initBuiltInApiModel()
+ if !existed {
+ initBuildInApiAdapter()
+ initBuiltInApiEnforcer()
+ initBuiltInPermissionModel()
+ initBuildInPermissionAdapter()
+ initBuiltInPermissionEnforcer()
+ }
+
initWebAuthn()
}
@@ -295,8 +303,8 @@ func initWebAuthn() {
gob.Register(webauthn.SessionData{})
}
-func initBuiltInModel() {
- model, err := GetModel("built-in/model-built-in")
+func initBuiltInPermissionModel() {
+ model, err := GetModel("built-in/permission-model-built-in")
if err != nil {
panic(err)
}
@@ -307,7 +315,7 @@ func initBuiltInModel() {
model = &Model{
Owner: "built-in",
- Name: "model-built-in",
+ Name: "permission-model-built-in",
CreatedTime: util.GetCurrentTime(),
DisplayName: "Built-in Model",
IsEnabled: true,
@@ -329,6 +337,54 @@ m = r.sub == p.sub && r.obj == p.obj && r.act == p.act`,
}
}
+func initBuiltInApiModel() bool {
+ model, err := GetModel("built-in/api-model-built-in")
+ if err != nil {
+ panic(err)
+ }
+
+ if model != nil {
+ return true
+ }
+
+ modelText := `
+[request_definition]
+r = subOwner, subName, method, urlPath, objOwner, objName
+
+[policy_definition]
+p = subOwner, subName, method, urlPath, objOwner, objName
+
+[role_definition]
+g = _, _
+
+[policy_effect]
+e = some(where (p.eft == allow))
+
+[matchers]
+m = (r.subOwner == p.subOwner || p.subOwner == "*") && \
+ (r.subName == p.subName || p.subName == "*" || r.subName != "anonymous" && p.subName == "!anonymous") && \
+ (r.method == p.method || p.method == "*") && \
+ (r.urlPath == p.urlPath || p.urlPath == "*") && \
+ (r.objOwner == p.objOwner || p.objOwner == "*") && \
+ (r.objName == p.objName || p.objName == "*") || \
+ (r.subOwner == r.objOwner && r.subName == r.objName)
+`
+
+ model = &Model{
+ Owner: "built-in",
+ Name: "api-model-built-in",
+ CreatedTime: util.GetCurrentTime(),
+ DisplayName: "API Model",
+ IsEnabled: true,
+ ModelText: modelText,
+ }
+ _, err = AddModel(model)
+ if err != nil {
+ panic(err)
+ }
+ return false
+}
+
func initBuiltInPermission() {
permission, err := GetPermission("built-in/permission-built-in")
if err != nil {
@@ -358,3 +414,109 @@ func initBuiltInPermission() {
panic(err)
}
}
+
+func initBuildInPermissionAdapter() {
+ permissionAdapter, err := GetAdapter("built-in/permission-adapter-built-in")
+ if err != nil {
+ panic(err)
+ }
+
+ if permissionAdapter != nil {
+ return
+ }
+
+ permissionAdapter = &Adapter{
+ Owner: "built-in",
+ Name: "permission-adapter-built-in",
+ CreatedTime: util.GetCurrentTime(),
+ Type: "Database",
+ DatabaseType: conf.GetConfigString("driverName"),
+ TableNamePrefix: conf.GetConfigString("tableNamePrefix"),
+ Database: conf.GetConfigString("dbName"),
+ Table: "casbin_user_rule",
+ IsEnabled: true,
+ }
+ _, err = AddAdapter(permissionAdapter)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func initBuildInApiAdapter() {
+ apiAdapter, err := GetAdapter("built-in/api-adapter-built-in")
+ if err != nil {
+ panic(err)
+ }
+
+ if apiAdapter != nil {
+ return
+ }
+
+ apiAdapter = &Adapter{
+ Owner: "built-in",
+ Name: "api-adapter-built-in",
+ CreatedTime: util.GetCurrentTime(),
+ Type: "Database",
+ DatabaseType: conf.GetConfigString("driverName"),
+ TableNamePrefix: conf.GetConfigString("tableNamePrefix"),
+ Database: conf.GetConfigString("dbName"),
+ Table: "casbin_api_rule",
+ IsEnabled: true,
+ }
+ _, err = AddAdapter(apiAdapter)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func initBuiltInPermissionEnforcer() {
+ permissionEnforcer, err := GetEnforcer("built-in/permission-enforcer-built-in")
+ if err != nil {
+ panic(err)
+ }
+
+ if permissionEnforcer != nil {
+ return
+ }
+
+ permissionEnforcer = &Enforcer{
+ Owner: "built-in",
+ Name: "permission-enforcer-built-in",
+ CreatedTime: util.GetCurrentTime(),
+ DisplayName: "Permission Enforcer",
+ Model: "built-in/permission-model-built-in",
+ Adapter: "built-in/permission-adapter-built-in",
+ IsEnabled: true,
+ }
+
+ _, err = AddEnforcer(permissionEnforcer)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func initBuiltInApiEnforcer() {
+ apiEnforcer, err := GetEnforcer("built-in/api-enforcer-built-in")
+ if err != nil {
+ panic(err)
+ }
+
+ if apiEnforcer != nil {
+ return
+ }
+
+ apiEnforcer = &Enforcer{
+ Owner: "built-in",
+ Name: "api-enforcer-built-in",
+ CreatedTime: util.GetCurrentTime(),
+ DisplayName: "API Enforcer",
+ Model: "built-in/api-model-built-in",
+ Adapter: "built-in/api-adapter-built-in",
+ IsEnabled: true,
+ }
+
+ _, err = AddEnforcer(apiEnforcer)
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/object/ldap.go b/object/ldap.go
index 0eb4ace7..624f41e1 100644
--- a/object/ldap.go
+++ b/object/ldap.go
@@ -46,7 +46,7 @@ func AddLdap(ldap *Ldap) (bool, error) {
ldap.CreatedTime = util.GetCurrentTime()
}
- affected, err := adapter.Engine.Insert(ldap)
+ affected, err := ormer.Engine.Insert(ldap)
if err != nil {
return false, err
}
@@ -56,7 +56,7 @@ func AddLdap(ldap *Ldap) (bool, error) {
func CheckLdapExist(ldap *Ldap) (bool, error) {
var result []*Ldap
- err := adapter.Engine.Find(&result, &Ldap{
+ err := ormer.Engine.Find(&result, &Ldap{
Owner: ldap.Owner,
Host: ldap.Host,
Port: ldap.Port,
@@ -77,7 +77,7 @@ func CheckLdapExist(ldap *Ldap) (bool, error) {
func GetLdaps(owner string) ([]*Ldap, error) {
var ldaps []*Ldap
- err := adapter.Engine.Desc("created_time").Find(&ldaps, &Ldap{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&ldaps, &Ldap{Owner: owner})
if err != nil {
return ldaps, err
}
@@ -91,7 +91,7 @@ func GetLdap(id string) (*Ldap, error) {
}
ldap := Ldap{Id: id}
- existed, err := adapter.Engine.Get(&ldap)
+ existed, err := ormer.Engine.Get(&ldap)
if err != nil {
return &ldap, nil
}
@@ -147,7 +147,7 @@ func UpdateLdap(ldap *Ldap) (bool, error) {
ldap.Password = l.Password
}
- affected, err := adapter.Engine.ID(ldap.Id).Cols("owner", "server_name", "host",
+ affected, err := ormer.Engine.ID(ldap.Id).Cols("owner", "server_name", "host",
"port", "enable_ssl", "username", "password", "base_dn", "filter", "filter_fields", "auto_sync").Update(ldap)
if err != nil {
return false, nil
@@ -157,7 +157,7 @@ func UpdateLdap(ldap *Ldap) (bool, error) {
}
func DeleteLdap(ldap *Ldap) (bool, error) {
- affected, err := adapter.Engine.ID(ldap.Id).Delete(&Ldap{})
+ affected, err := ormer.Engine.ID(ldap.Id).Delete(&Ldap{})
if err != nil {
return false, err
}
diff --git a/object/ldap_autosync.go b/object/ldap_autosync.go
index 8e9951d5..ceac2c18 100644
--- a/object/ldap_autosync.go
+++ b/object/ldap_autosync.go
@@ -118,7 +118,7 @@ func (l *LdapAutoSynchronizer) syncRoutine(ldap *Ldap, stopChan chan struct{}) e
// start all autosync goroutine for existing ldap servers in each organizations
func (l *LdapAutoSynchronizer) LdapAutoSynchronizerStartUpAll() error {
organizations := []*Organization{}
- err := adapter.Engine.Desc("created_time").Find(&organizations)
+ err := ormer.Engine.Desc("created_time").Find(&organizations)
if err != nil {
logs.Info("failed to Star up LdapAutoSynchronizer; ")
}
@@ -141,7 +141,7 @@ func (l *LdapAutoSynchronizer) LdapAutoSynchronizerStartUpAll() error {
}
func UpdateLdapSyncTime(ldapId string) error {
- _, err := adapter.Engine.ID(ldapId).Update(&Ldap{LastSync: util.GetCurrentTime()})
+ _, err := ormer.Engine.ID(ldapId).Update(&Ldap{LastSync: util.GetCurrentTime()})
if err != nil {
return err
}
diff --git a/object/ldap_conn.go b/object/ldap_conn.go
index 219c9ac6..6dd83b21 100644
--- a/object/ldap_conn.go
+++ b/object/ldap_conn.go
@@ -338,7 +338,7 @@ func SyncLdapUsers(owner string, syncUsers []LdapUser, ldapId string) (existUser
func GetExistUuids(owner string, uuids []string) ([]string, error) {
var existUuids []string
- err := adapter.Engine.Table("user").Where("owner = ?", owner).Cols("ldap").
+ err := ormer.Engine.Table("user").Where("owner = ?", owner).Cols("ldap").
In("ldap", uuids).Select("DISTINCT ldap").Find(&existUuids)
if err != nil {
return existUuids, err
@@ -350,7 +350,7 @@ func GetExistUuids(owner string, uuids []string) ([]string, error) {
func (ldapUser *LdapUser) buildLdapUserName() (string, error) {
user := User{}
uidWithNumber := fmt.Sprintf("%s_%s", ldapUser.Uid, ldapUser.UidNumber)
- has, err := adapter.Engine.Where("name = ? or name = ?", ldapUser.Uid, uidWithNumber).Get(&user)
+ has, err := ormer.Engine.Where("name = ? or name = ?", ldapUser.Uid, uidWithNumber).Get(&user)
if err != nil {
return "", err
}
diff --git a/object/message.go b/object/message.go
index dfa84208..cef54fbe 100644
--- a/object/message.go
+++ b/object/message.go
@@ -55,13 +55,13 @@ func GetMessageCount(owner, organization, field, value string) (int64, error) {
func GetMessages(owner string) ([]*Message, error) {
messages := []*Message{}
- err := adapter.Engine.Desc("created_time").Find(&messages, &Message{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&messages, &Message{Owner: owner})
return messages, err
}
func GetChatMessages(chat string) ([]*Message, error) {
messages := []*Message{}
- err := adapter.Engine.Asc("created_time").Find(&messages, &Message{Chat: chat})
+ err := ormer.Engine.Asc("created_time").Find(&messages, &Message{Chat: chat})
return messages, err
}
@@ -78,7 +78,7 @@ func getMessage(owner string, name string) (*Message, error) {
}
message := Message{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&message)
+ existed, err := ormer.Engine.Get(&message)
if err != nil {
return nil, err
}
@@ -103,7 +103,7 @@ func UpdateMessage(id string, message *Message) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(message)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(message)
if err != nil {
return false, err
}
@@ -112,7 +112,7 @@ func UpdateMessage(id string, message *Message) (bool, error) {
}
func AddMessage(message *Message) (bool, error) {
- affected, err := adapter.Engine.Insert(message)
+ affected, err := ormer.Engine.Insert(message)
if err != nil {
return false, err
}
@@ -121,7 +121,7 @@ func AddMessage(message *Message) (bool, error) {
}
func DeleteMessage(message *Message) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{message.Owner, message.Name}).Delete(&Message{})
+ affected, err := ormer.Engine.ID(core.PK{message.Owner, message.Name}).Delete(&Message{})
if err != nil {
return false, err
}
@@ -130,7 +130,7 @@ func DeleteMessage(message *Message) (bool, error) {
}
func DeleteChatMessages(chat string) (bool, error) {
- affected, err := adapter.Engine.Delete(&Message{Chat: chat})
+ affected, err := ormer.Engine.Delete(&Message{Chat: chat})
if err != nil {
return false, err
}
diff --git a/object/migrator.go b/object/migrator.go
index d86aff5d..68766412 100644
--- a/object/migrator.go
+++ b/object/migrator.go
@@ -43,7 +43,7 @@ func DoMigration() {
IDColumnName: "id",
}
- m := migrate.New(adapter.Engine, options, migrations)
+ m := migrate.New(ormer.Engine, options, migrations)
err := m.Migrate()
if err != nil {
panic(err)
diff --git a/object/migrator_1_101_0_PR_1083.go b/object/migrator_1_101_0_PR_1083.go
index 53319981..a778e3c2 100644
--- a/object/migrator_1_101_0_PR_1083.go
+++ b/object/migrator_1_101_0_PR_1083.go
@@ -24,9 +24,9 @@ import (
type Migrator_1_101_0_PR_1083 struct{}
func (*Migrator_1_101_0_PR_1083) IsMigrationNeeded() bool {
- exist1, _ := adapter.Engine.IsTableExist("model")
- exist2, _ := adapter.Engine.IsTableExist("permission")
- exist3, _ := adapter.Engine.IsTableExist("permission_rule")
+ exist1, _ := ormer.Engine.IsTableExist("model")
+ exist2, _ := ormer.Engine.IsTableExist("permission")
+ exist3, _ := ormer.Engine.IsTableExist("permission_rule")
if exist1 && exist2 && exist3 {
return true
diff --git a/object/migrator_1_235_0_PR_1530.go b/object/migrator_1_235_0_PR_1530.go
index 3604e5d3..f43aef39 100644
--- a/object/migrator_1_235_0_PR_1530.go
+++ b/object/migrator_1_235_0_PR_1530.go
@@ -23,7 +23,7 @@ import (
type Migrator_1_235_0_PR_1530 struct{}
func (*Migrator_1_235_0_PR_1530) IsMigrationNeeded() bool {
- exist, _ := adapter.Engine.IsTableExist("casbin_rule")
+ exist, _ := ormer.Engine.IsTableExist("casbin_rule")
return exist
}
diff --git a/object/migrator_1_240_0_PR_1539.go b/object/migrator_1_240_0_PR_1539.go
index 72df8a25..c99b11c6 100644
--- a/object/migrator_1_240_0_PR_1539.go
+++ b/object/migrator_1_240_0_PR_1539.go
@@ -24,8 +24,8 @@ import (
type Migrator_1_240_0_PR_1539 struct{}
func (*Migrator_1_240_0_PR_1539) IsMigrationNeeded() bool {
- exist, _ := adapter.Engine.IsTableExist("session")
- err := adapter.Engine.Table("session").Find(&[]*Session{})
+ exist, _ := ormer.Engine.IsTableExist("session")
+ err := ormer.Engine.Table("session").Find(&[]*Session{})
if exist && err != nil {
return true
diff --git a/object/migrator_1_314_0_PR_1841.go b/object/migrator_1_314_0_PR_1841.go
index 441f8868..75bedace 100644
--- a/object/migrator_1_314_0_PR_1841.go
+++ b/object/migrator_1_314_0_PR_1841.go
@@ -22,7 +22,7 @@ import (
type Migrator_1_314_0_PR_1841 struct{}
func (*Migrator_1_314_0_PR_1841) IsMigrationNeeded() bool {
- count, err := adapter.Engine.Where("password_type=?", "").Count(&User{})
+ count, err := ormer.Engine.Where("password_type=?", "").Count(&User{})
if err != nil {
// table doesn't exist
return false
diff --git a/object/model.go b/object/model.go
index f051cb28..487366cd 100644
--- a/object/model.go
+++ b/object/model.go
@@ -40,7 +40,7 @@ func GetModelCount(owner, field, value string) (int64, error) {
func GetModels(owner string) ([]*Model, error) {
models := []*Model{}
- err := adapter.Engine.Desc("created_time").Find(&models, &Model{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&models, &Model{Owner: owner})
if err != nil {
return models, err
}
@@ -65,7 +65,7 @@ func getModel(owner string, name string) (*Model, error) {
}
m := Model{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&m)
+ existed, err := ormer.Engine.Get(&m)
if err != nil {
return &m, err
}
@@ -111,7 +111,7 @@ func UpdateModel(id string, modelObj *Model) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(modelObj)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(modelObj)
if err != nil {
return false, err
}
@@ -120,7 +120,7 @@ func UpdateModel(id string, modelObj *Model) (bool, error) {
}
func AddModel(model *Model) (bool, error) {
- affected, err := adapter.Engine.Insert(model)
+ affected, err := ormer.Engine.Insert(model)
if err != nil {
return false, err
}
@@ -129,7 +129,7 @@ func AddModel(model *Model) (bool, error) {
}
func DeleteModel(model *Model) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{model.Owner, model.Name}).Delete(&Model{})
+ affected, err := ormer.Engine.ID(core.PK{model.Owner, model.Name}).Delete(&Model{})
if err != nil {
return false, err
}
@@ -137,12 +137,12 @@ func DeleteModel(model *Model) (bool, error) {
return affected != 0, nil
}
-func (model *Model) GetId() string {
- return fmt.Sprintf("%s/%s", model.Owner, model.Name)
+func (m *Model) GetId() string {
+ return fmt.Sprintf("%s/%s", m.Owner, m.Name)
}
func modelChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -175,3 +175,11 @@ func HasRoleDefinition(m model.Model) bool {
}
return m["g"] != nil
}
+
+func (m *Model) initModel() (model.Model, error) {
+ casbinModel, err := model.NewModelFromString(m.ModelText)
+ if err != nil {
+ return nil, err
+ }
+ return casbinModel, nil
+}
diff --git a/object/organization.go b/object/organization.go
index 9384326e..c1840757 100644
--- a/object/organization.go
+++ b/object/organization.go
@@ -80,12 +80,12 @@ func GetOrganizationCount(owner, field, value string) (int64, error) {
func GetOrganizations(owner string, name ...string) ([]*Organization, error) {
organizations := []*Organization{}
if name != nil && len(name) > 0 {
- err := adapter.Engine.Desc("created_time").Where(builder.In("name", name)).Find(&organizations)
+ err := ormer.Engine.Desc("created_time").Where(builder.In("name", name)).Find(&organizations)
if err != nil {
return nil, err
}
} else {
- err := adapter.Engine.Desc("created_time").Find(&organizations, &Organization{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&organizations, &Organization{Owner: owner})
if err != nil {
return nil, err
}
@@ -96,7 +96,7 @@ func GetOrganizations(owner string, name ...string) ([]*Organization, error) {
func GetOrganizationsByFields(owner string, fields ...string) ([]*Organization, error) {
organizations := []*Organization{}
- err := adapter.Engine.Desc("created_time").Cols(fields...).Find(&organizations, &Organization{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Cols(fields...).Find(&organizations, &Organization{Owner: owner})
if err != nil {
return nil, err
}
@@ -126,7 +126,7 @@ func getOrganization(owner string, name string) (*Organization, error) {
}
organization := Organization{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&organization)
+ existed, err := ormer.Engine.Get(&organization)
if err != nil {
return nil, err
}
@@ -201,7 +201,7 @@ func UpdateOrganization(id string, organization *Organization) (bool, error) {
}
}
- session := adapter.Engine.ID(core.PK{owner, name}).AllCols()
+ session := ormer.Engine.ID(core.PK{owner, name}).AllCols()
if organization.MasterPassword == "***" {
session.Omit("master_password")
}
@@ -214,7 +214,7 @@ func UpdateOrganization(id string, organization *Organization) (bool, error) {
}
func AddOrganization(organization *Organization) (bool, error) {
- affected, err := adapter.Engine.Insert(organization)
+ affected, err := ormer.Engine.Insert(organization)
if err != nil {
return false, err
}
@@ -227,7 +227,7 @@ func DeleteOrganization(organization *Organization) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{organization.Owner, organization.Name}).Delete(&Organization{})
+ affected, err := ormer.Engine.ID(core.PK{organization.Owner, organization.Name}).Delete(&Organization{})
if err != nil {
return false, err
}
@@ -299,7 +299,7 @@ func GetDefaultApplication(id string) (*Application, error) {
}
applications := []*Application{}
- err = adapter.Engine.Asc("created_time").Find(&applications, &Application{Organization: organization.Name})
+ err = ormer.Engine.Asc("created_time").Find(&applications, &Application{Organization: organization.Name})
if err != nil {
return nil, err
}
@@ -330,7 +330,7 @@ func GetDefaultApplication(id string) (*Application, error) {
}
func organizationChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -360,7 +360,7 @@ func organizationChangeTrigger(oldName string, newName string) error {
}
role := new(Role)
- _, err = adapter.Engine.Where("owner=?", oldName).Get(role)
+ _, err = ormer.Engine.Where("owner=?", oldName).Get(role)
if err != nil {
return err
}
@@ -385,7 +385,7 @@ func organizationChangeTrigger(oldName string, newName string) error {
}
permission := new(Permission)
- _, err = adapter.Engine.Where("owner=?", oldName).Get(permission)
+ _, err = ormer.Engine.Where("owner=?", oldName).Get(permission)
if err != nil {
return err
}
@@ -409,9 +409,9 @@ func organizationChangeTrigger(oldName string, newName string) error {
return err
}
- casbinAdapter := new(CasbinAdapter)
- casbinAdapter.Owner = newName
- _, err = session.Where("owner=?", oldName).Update(casbinAdapter)
+ adapter := new(Adapter)
+ adapter.Owner = newName
+ _, err = session.Where("owner=?", oldName).Update(adapter)
if err != nil {
return err
}
diff --git a/object/ormer.go b/object/ormer.go
new file mode 100644
index 00000000..8ecf78ed
--- /dev/null
+++ b/object/ormer.go
@@ -0,0 +1,379 @@
+// Copyright 2021 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 (
+ "database/sql"
+ "fmt"
+ "runtime"
+ "strings"
+
+ "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
+ _ "github.com/lib/pq" // db = postgres
+ "github.com/xorm-io/core"
+ "github.com/xorm-io/xorm"
+ _ "modernc.org/sqlite" // db = sqlite
+)
+
+var ormer *Ormer
+
+func InitConfig() {
+ err := beego.LoadAppConfig("ini", "../conf/app.conf")
+ if err != nil {
+ panic(err)
+ }
+
+ beego.BConfig.WebConfig.Session.SessionOn = true
+
+ InitAdapter(true)
+ CreateTables(true)
+ DoMigration()
+}
+
+func InitAdapter(createDatabase bool) {
+ if createDatabase {
+ err := createDatabaseForPostgres(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
+ if err != nil {
+ panic(err)
+ }
+ }
+
+ ormer = NewAdapter(conf.GetConfigString("driverName"), conf.GetConfigDataSourceName(), conf.GetConfigString("dbName"))
+
+ tableNamePrefix := conf.GetConfigString("tableNamePrefix")
+ tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, tableNamePrefix)
+ ormer.Engine.SetTableMapper(tbMapper)
+}
+
+func CreateTables(createDatabase bool) {
+ if createDatabase {
+ err := ormer.CreateDatabase()
+ if err != nil {
+ panic(err)
+ }
+ }
+
+ ormer.createTable()
+}
+
+// Ormer represents the MySQL adapter for policy storage.
+type Ormer struct {
+ driverName string
+ dataSourceName string
+ dbName string
+ Engine *xorm.Engine
+}
+
+// finalizer is the destructor for Ormer.
+func finalizer(a *Ormer) {
+ err := a.Engine.Close()
+ if err != nil {
+ panic(err)
+ }
+}
+
+// NewAdapter is the constructor for Ormer.
+func NewAdapter(driverName string, dataSourceName string, dbName string) *Ormer {
+ a := &Ormer{}
+ a.driverName = driverName
+ a.dataSourceName = dataSourceName
+ a.dbName = dbName
+
+ // Open the DB, create it if not existed.
+ a.open()
+
+ // Call the destructor when the object is released.
+ runtime.SetFinalizer(a, finalizer)
+
+ return a
+}
+
+func createDatabaseForPostgres(driverName string, dataSourceName string, dbName string) error {
+ if driverName == "postgres" {
+ db, err := sql.Open(driverName, dataSourceName)
+ if err != nil {
+ return err
+ }
+ defer db.Close()
+
+ _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s;", dbName))
+ if err != nil {
+ if !strings.Contains(err.Error(), "already exists") {
+ return err
+ }
+ }
+
+ return nil
+ } else {
+ return nil
+ }
+}
+
+func (a *Ormer) CreateDatabase() error {
+ if a.driverName == "postgres" {
+ return nil
+ }
+
+ engine, err := xorm.NewEngine(a.driverName, a.dataSourceName)
+ if err != nil {
+ return err
+ }
+ defer engine.Close()
+
+ _, err = engine.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s default charset utf8mb4 COLLATE utf8mb4_general_ci", a.dbName))
+ return err
+}
+
+func (a *Ormer) open() {
+ dataSourceName := a.dataSourceName + a.dbName
+ if a.driverName != "mysql" {
+ dataSourceName = a.dataSourceName
+ }
+
+ engine, err := xorm.NewEngine(a.driverName, dataSourceName)
+ if err != nil {
+ panic(err)
+ }
+
+ a.Engine = engine
+}
+
+func (a *Ormer) close() {
+ _ = a.Engine.Close()
+ a.Engine = nil
+}
+
+func (a *Ormer) createTable() {
+ showSql := conf.GetConfigBool("showSql")
+ a.Engine.ShowSQL(showSql)
+
+ err := a.Engine.Sync2(new(Organization))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(User))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Group))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Role))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Permission))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Model))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Adapter))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Enforcer))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Provider))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Application))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Resource))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Token))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(VerificationRecord))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Record))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Webhook))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Syncer))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Cert))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Chat))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Message))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Product))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Payment))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Ldap))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(PermissionRule))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(xormadapter.CasbinRule))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Session))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Subscription))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Plan))
+ if err != nil {
+ panic(err)
+ }
+
+ err = a.Engine.Sync2(new(Pricing))
+ if err != nil {
+ 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/payment.go b/object/payment.go
index c16c36dd..9a261eed 100644
--- a/object/payment.go
+++ b/object/payment.go
@@ -63,7 +63,7 @@ func GetPaymentCount(owner, organization, field, value string) (int64, error) {
func GetPayments(owner string) ([]*Payment, error) {
payments := []*Payment{}
- err := adapter.Engine.Desc("created_time").Find(&payments, &Payment{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&payments, &Payment{Owner: owner})
if err != nil {
return nil, err
}
@@ -73,7 +73,7 @@ func GetPayments(owner string) ([]*Payment, error) {
func GetUserPayments(owner string, organization string, user string) ([]*Payment, error) {
payments := []*Payment{}
- err := adapter.Engine.Desc("created_time").Find(&payments, &Payment{Owner: owner, Organization: organization, User: user})
+ err := ormer.Engine.Desc("created_time").Find(&payments, &Payment{Owner: owner, Organization: organization, User: user})
if err != nil {
return nil, err
}
@@ -98,7 +98,7 @@ func getPayment(owner string, name string) (*Payment, error) {
}
payment := Payment{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&payment)
+ existed, err := ormer.Engine.Get(&payment)
if err != nil {
return nil, err
}
@@ -123,7 +123,7 @@ func UpdatePayment(id string, payment *Payment) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(payment)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(payment)
if err != nil {
panic(err)
}
@@ -132,7 +132,7 @@ func UpdatePayment(id string, payment *Payment) (bool, error) {
}
func AddPayment(payment *Payment) (bool, error) {
- affected, err := adapter.Engine.Insert(payment)
+ affected, err := ormer.Engine.Insert(payment)
if err != nil {
return false, err
}
@@ -141,7 +141,7 @@ func AddPayment(payment *Payment) (bool, error) {
}
func DeletePayment(payment *Payment) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{payment.Owner, payment.Name}).Delete(&Payment{})
+ affected, err := ormer.Engine.ID(core.PK{payment.Owner, payment.Name}).Delete(&Payment{})
if err != nil {
return false, err
}
diff --git a/object/permission.go b/object/permission.go
index 514c3f09..2a149179 100644
--- a/object/permission.go
+++ b/object/permission.go
@@ -74,7 +74,7 @@ func GetPermissionCount(owner, field, value string) (int64, error) {
func GetPermissions(owner string) ([]*Permission, error) {
permissions := []*Permission{}
- err := adapter.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner})
if err != nil {
return permissions, err
}
@@ -99,7 +99,7 @@ func getPermission(owner string, name string) (*Permission, error) {
}
permission := Permission{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&permission)
+ existed, err := ormer.Engine.Get(&permission)
if err != nil {
return &permission, err
}
@@ -155,7 +155,7 @@ func UpdatePermission(id string, permission *Permission) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(permission)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(permission)
if err != nil {
return false, err
}
@@ -164,9 +164,9 @@ func UpdatePermission(id string, permission *Permission) (bool, error) {
removeGroupingPolicies(oldPermission)
removePolicies(oldPermission)
if oldPermission.Adapter != "" && oldPermission.Adapter != permission.Adapter {
- isEmpty, _ := adapter.Engine.IsTableEmpty(oldPermission.Adapter)
+ isEmpty, _ := ormer.Engine.IsTableEmpty(oldPermission.Adapter)
if isEmpty {
- err = adapter.Engine.DropTables(oldPermission.Adapter)
+ err = ormer.Engine.DropTables(oldPermission.Adapter)
if err != nil {
return false, err
}
@@ -180,7 +180,7 @@ func UpdatePermission(id string, permission *Permission) (bool, error) {
}
func AddPermission(permission *Permission) (bool, error) {
- affected, err := adapter.Engine.Insert(permission)
+ affected, err := ormer.Engine.Insert(permission)
if err != nil {
return false, err
}
@@ -198,7 +198,7 @@ func AddPermissions(permissions []*Permission) bool {
return false
}
- affected, err := adapter.Engine.Insert(permissions)
+ affected, err := ormer.Engine.Insert(permissions)
if err != nil {
if !strings.Contains(err.Error(), "Duplicate entry") {
panic(err)
@@ -242,7 +242,7 @@ func AddPermissionsInBatch(permissions []*Permission) bool {
}
func DeletePermission(permission *Permission) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{permission.Owner, permission.Name}).Delete(&Permission{})
+ affected, err := ormer.Engine.ID(core.PK{permission.Owner, permission.Name}).Delete(&Permission{})
if err != nil {
return false, err
}
@@ -251,9 +251,9 @@ func DeletePermission(permission *Permission) (bool, error) {
removeGroupingPolicies(permission)
removePolicies(permission)
if permission.Adapter != "" && permission.Adapter != "permission_rule" {
- isEmpty, _ := adapter.Engine.IsTableEmpty(permission.Adapter)
+ isEmpty, _ := ormer.Engine.IsTableEmpty(permission.Adapter)
if isEmpty {
- err = adapter.Engine.DropTables(permission.Adapter)
+ err = ormer.Engine.DropTables(permission.Adapter)
if err != nil {
return false, err
}
@@ -266,7 +266,7 @@ func DeletePermission(permission *Permission) (bool, error) {
func GetPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error) {
permissions := []*Permission{}
- err := adapter.Engine.Where("users like ?", "%"+userId+"\"%").Find(&permissions)
+ err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&permissions)
if err != nil {
return nil, nil, err
}
@@ -290,7 +290,7 @@ func GetPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error)
for _, role := range roles {
perms := []*Permission{}
- err := adapter.Engine.Where("roles like ?", "%"+role.Name+"\"%").Find(&perms)
+ err := ormer.Engine.Where("roles like ?", "%"+role.Name+"\"%").Find(&perms)
if err != nil {
return nil, nil, err
}
@@ -310,7 +310,7 @@ func GetPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error)
func GetPermissionsByRole(roleId string) ([]*Permission, error) {
permissions := []*Permission{}
- err := adapter.Engine.Where("roles like ?", "%"+roleId+"\"%").Find(&permissions)
+ err := ormer.Engine.Where("roles like ?", "%"+roleId+"\"%").Find(&permissions)
if err != nil {
return permissions, err
}
@@ -320,7 +320,7 @@ func GetPermissionsByRole(roleId string) ([]*Permission, error) {
func GetPermissionsByResource(resourceId string) ([]*Permission, error) {
permissions := []*Permission{}
- err := adapter.Engine.Where("resources like ?", "%"+resourceId+"\"%").Find(&permissions)
+ err := ormer.Engine.Where("resources like ?", "%"+resourceId+"\"%").Find(&permissions)
if err != nil {
return permissions, err
}
@@ -330,7 +330,7 @@ func GetPermissionsByResource(resourceId string) ([]*Permission, error) {
func GetPermissionsBySubmitter(owner string, submitter string) ([]*Permission, error) {
permissions := []*Permission{}
- err := adapter.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Submitter: submitter})
+ err := ormer.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Submitter: submitter})
if err != nil {
return permissions, err
}
@@ -340,7 +340,7 @@ func GetPermissionsBySubmitter(owner string, submitter string) ([]*Permission, e
func GetPermissionsByModel(owner string, model string) ([]*Permission, error) {
permissions := []*Permission{}
- err := adapter.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Model: model})
+ err := ormer.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Model: model})
if err != nil {
return permissions, err
}
diff --git a/object/permission_enforcer.go b/object/permission_enforcer.go
index 998e36a7..c2b686b5 100644
--- a/object/permission_enforcer.go
+++ b/object/permission_enforcer.go
@@ -69,7 +69,7 @@ func getPermissionEnforcer(p *Permission, permissionIDs ...string) *casbin.Enfor
func (p *Permission) setEnforcerAdapter(enforcer *casbin.Enforcer) error {
tableName := "permission_rule"
if len(p.Adapter) != 0 {
- adapterObj, err := getCasbinAdapter(p.Owner, p.Adapter)
+ adapterObj, err := getAdapter(p.Owner, p.Adapter)
if err != nil {
return err
}
@@ -81,12 +81,12 @@ func (p *Permission) setEnforcerAdapter(enforcer *casbin.Enforcer) error {
tableNamePrefix := conf.GetConfigString("tableNamePrefix")
driverName := conf.GetConfigString("driverName")
dataSourceName := conf.GetConfigRealDataSourceName(driverName)
- casbinAdapter, err := xormadapter.NewAdapterWithTableName(driverName, dataSourceName, tableName, tableNamePrefix, true)
+ adapter, err := xormadapter.NewAdapterWithTableName(driverName, dataSourceName, tableName, tableNamePrefix, true)
if err != nil {
return err
}
- enforcer.SetAdapter(casbinAdapter)
+ enforcer.SetAdapter(adapter)
return nil
}
diff --git a/object/plan.go b/object/plan.go
index 48d482cf..f2e0cf6b 100644
--- a/object/plan.go
+++ b/object/plan.go
@@ -44,7 +44,7 @@ func GetPlanCount(owner, field, value string) (int64, error) {
func GetPlans(owner string) ([]*Plan, error) {
plans := []*Plan{}
- err := adapter.Engine.Desc("created_time").Find(&plans, &Plan{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&plans, &Plan{Owner: owner})
if err != nil {
return plans, err
}
@@ -67,7 +67,7 @@ func getPlan(owner, name string) (*Plan, error) {
}
plan := Plan{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&plan)
+ existed, err := ormer.Engine.Get(&plan)
if err != nil {
return &plan, err
}
@@ -91,7 +91,7 @@ func UpdatePlan(id string, plan *Plan) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(plan)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(plan)
if err != nil {
return false, err
}
@@ -100,7 +100,7 @@ func UpdatePlan(id string, plan *Plan) (bool, error) {
}
func AddPlan(plan *Plan) (bool, error) {
- affected, err := adapter.Engine.Insert(plan)
+ affected, err := ormer.Engine.Insert(plan)
if err != nil {
return false, err
}
@@ -108,7 +108,7 @@ func AddPlan(plan *Plan) (bool, error) {
}
func DeletePlan(plan *Plan) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{plan.Owner, plan.Name}).Delete(plan)
+ affected, err := ormer.Engine.ID(core.PK{plan.Owner, plan.Name}).Delete(plan)
if err != nil {
return false, err
}
diff --git a/object/pricing.go b/object/pricing.go
index ffeb7213..8d81f424 100644
--- a/object/pricing.go
+++ b/object/pricing.go
@@ -48,7 +48,7 @@ func GetPricingCount(owner, field, value string) (int64, error) {
func GetPricings(owner string) ([]*Pricing, error) {
pricings := []*Pricing{}
- err := adapter.Engine.Desc("created_time").Find(&pricings, &Pricing{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&pricings, &Pricing{Owner: owner})
if err != nil {
return pricings, err
}
@@ -72,7 +72,7 @@ func getPricing(owner, name string) (*Pricing, error) {
}
pricing := Pricing{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&pricing)
+ existed, err := ormer.Engine.Get(&pricing)
if err != nil {
return &pricing, err
}
@@ -96,7 +96,7 @@ func UpdatePricing(id string, pricing *Pricing) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(pricing)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(pricing)
if err != nil {
return false, err
}
@@ -105,7 +105,7 @@ func UpdatePricing(id string, pricing *Pricing) (bool, error) {
}
func AddPricing(pricing *Pricing) (bool, error) {
- affected, err := adapter.Engine.Insert(pricing)
+ affected, err := ormer.Engine.Insert(pricing)
if err != nil {
return false, err
}
@@ -113,7 +113,7 @@ func AddPricing(pricing *Pricing) (bool, error) {
}
func DeletePricing(pricing *Pricing) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{pricing.Owner, pricing.Name}).Delete(pricing)
+ affected, err := ormer.Engine.ID(core.PK{pricing.Owner, pricing.Name}).Delete(pricing)
if err != nil {
return false, err
}
diff --git a/object/product.go b/object/product.go
index 4a29bb49..cc77d124 100644
--- a/object/product.go
+++ b/object/product.go
@@ -50,7 +50,7 @@ func GetProductCount(owner, field, value string) (int64, error) {
func GetProducts(owner string) ([]*Product, error) {
products := []*Product{}
- err := adapter.Engine.Desc("created_time").Find(&products, &Product{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&products, &Product{Owner: owner})
if err != nil {
return products, err
}
@@ -75,7 +75,7 @@ func getProduct(owner string, name string) (*Product, error) {
}
product := Product{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&product)
+ existed, err := ormer.Engine.Get(&product)
if err != nil {
return &product, nil
}
@@ -100,7 +100,7 @@ func UpdateProduct(id string, product *Product) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(product)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(product)
if err != nil {
return false, err
}
@@ -109,7 +109,7 @@ func UpdateProduct(id string, product *Product) (bool, error) {
}
func AddProduct(product *Product) (bool, error) {
- affected, err := adapter.Engine.Insert(product)
+ affected, err := ormer.Engine.Insert(product)
if err != nil {
return false, err
}
@@ -118,7 +118,7 @@ func AddProduct(product *Product) (bool, error) {
}
func DeleteProduct(product *Product) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{product.Owner, product.Name}).Delete(&Product{})
+ affected, err := ormer.Engine.ID(core.PK{product.Owner, product.Name}).Delete(&Product{})
if err != nil {
return false, err
}
diff --git a/object/provider.go b/object/provider.go
index 9a53cb3a..cf04fbcf 100644
--- a/object/provider.go
+++ b/object/provider.go
@@ -119,7 +119,7 @@ func GetGlobalProviderCount(field, value string) (int64, error) {
func GetProviders(owner string) ([]*Provider, error) {
providers := []*Provider{}
- err := adapter.Engine.Where("owner = ? or owner = ? ", "admin", owner).Desc("created_time").Find(&providers, &Provider{})
+ err := ormer.Engine.Where("owner = ? or owner = ? ", "admin", owner).Desc("created_time").Find(&providers, &Provider{})
if err != nil {
return providers, err
}
@@ -129,7 +129,7 @@ func GetProviders(owner string) ([]*Provider, error) {
func GetGlobalProviders() ([]*Provider, error) {
providers := []*Provider{}
- err := adapter.Engine.Desc("created_time").Find(&providers)
+ err := ormer.Engine.Desc("created_time").Find(&providers)
if err != nil {
return providers, err
}
@@ -165,7 +165,7 @@ func getProvider(owner string, name string) (*Provider, error) {
}
provider := Provider{Name: name}
- existed, err := adapter.Engine.Get(&provider)
+ existed, err := ormer.Engine.Get(&provider)
if err != nil {
return &provider, err
}
@@ -184,7 +184,7 @@ func GetProvider(id string) (*Provider, error) {
func getDefaultAiProvider() (*Provider, error) {
provider := Provider{Owner: "admin", Category: "AI"}
- existed, err := adapter.Engine.Get(&provider)
+ existed, err := ormer.Engine.Get(&provider)
if err != nil {
return &provider, err
}
@@ -221,7 +221,7 @@ func UpdateProvider(id string, provider *Provider) (bool, error) {
}
}
- session := adapter.Engine.ID(core.PK{owner, name}).AllCols()
+ session := ormer.Engine.ID(core.PK{owner, name}).AllCols()
if provider.ClientSecret == "***" {
session = session.Omit("client_secret")
}
@@ -248,7 +248,7 @@ func AddProvider(provider *Provider) (bool, error) {
provider.IntranetEndpoint = util.GetEndPoint(provider.IntranetEndpoint)
}
- affected, err := adapter.Engine.Insert(provider)
+ affected, err := ormer.Engine.Insert(provider)
if err != nil {
return false, err
}
@@ -257,7 +257,7 @@ func AddProvider(provider *Provider) (bool, error) {
}
func DeleteProvider(provider *Provider) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{provider.Owner, provider.Name}).Delete(&Provider{})
+ affected, err := ormer.Engine.ID(core.PK{provider.Owner, provider.Name}).Delete(&Provider{})
if err != nil {
return false, err
}
@@ -297,7 +297,7 @@ func (p *Provider) GetId() string {
func GetCaptchaProviderByOwnerName(applicationId, lang string) (*Provider, error) {
owner, name := util.GetOwnerAndNameFromId(applicationId)
provider := Provider{Owner: owner, Name: name, Category: "Captcha"}
- existed, err := adapter.Engine.Get(&provider)
+ existed, err := ormer.Engine.Get(&provider)
if err != nil {
return nil, err
}
@@ -333,7 +333,7 @@ func GetCaptchaProviderByApplication(applicationId, isCurrentProvider, lang stri
}
func providerChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -342,7 +342,7 @@ func providerChangeTrigger(oldName string, newName string) error {
}
var applications []*Application
- err = adapter.Engine.Find(&applications)
+ err = ormer.Engine.Find(&applications)
if err != nil {
return err
}
diff --git a/object/record.go b/object/record.go
index 7a71ef19..c2c20f41 100644
--- a/object/record.go
+++ b/object/record.go
@@ -96,7 +96,7 @@ func AddRecord(record *Record) bool {
fmt.Println(errWebhook)
}
- affected, err := adapter.Engine.Insert(record)
+ affected, err := ormer.Engine.Insert(record)
if err != nil {
panic(err)
}
@@ -111,7 +111,7 @@ func GetRecordCount(field, value string, filterRecord *Record) (int64, error) {
func GetRecords() ([]*Record, error) {
records := []*Record{}
- err := adapter.Engine.Desc("id").Find(&records)
+ err := ormer.Engine.Desc("id").Find(&records)
if err != nil {
return records, err
}
@@ -132,7 +132,7 @@ func GetPaginationRecords(offset, limit int, field, value, sortField, sortOrder
func GetRecordsByField(record *Record) ([]*Record, error) {
records := []*Record{}
- err := adapter.Engine.Find(&records, record)
+ err := ormer.Engine.Find(&records, record)
if err != nil {
return records, err
}
diff --git a/object/resource.go b/object/resource.go
index 603e5277..bb66aa22 100644
--- a/object/resource.go
+++ b/object/resource.go
@@ -52,7 +52,7 @@ func GetResources(owner string, user string) ([]*Resource, error) {
}
resources := []*Resource{}
- err := adapter.Engine.Desc("created_time").Find(&resources, &Resource{Owner: owner, User: user})
+ err := ormer.Engine.Desc("created_time").Find(&resources, &Resource{Owner: owner, User: user})
if err != nil {
return resources, err
}
@@ -82,7 +82,7 @@ func getResource(owner string, name string) (*Resource, error) {
}
resource := Resource{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&resource)
+ existed, err := ormer.Engine.Get(&resource)
if err != nil {
return &resource, err
}
@@ -107,7 +107,7 @@ func UpdateResource(id string, resource *Resource) (bool, error) {
return false, nil
}
- _, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(resource)
+ _, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(resource)
if err != nil {
return false, err
}
@@ -117,7 +117,7 @@ func UpdateResource(id string, resource *Resource) (bool, error) {
}
func AddResource(resource *Resource) (bool, error) {
- affected, err := adapter.Engine.Insert(resource)
+ affected, err := ormer.Engine.Insert(resource)
if err != nil {
return false, err
}
@@ -126,7 +126,7 @@ func AddResource(resource *Resource) (bool, error) {
}
func DeleteResource(resource *Resource) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{resource.Owner, resource.Name}).Delete(&Resource{})
+ affected, err := ormer.Engine.ID(core.PK{resource.Owner, resource.Name}).Delete(&Resource{})
if err != nil {
return false, err
}
diff --git a/object/role.go b/object/role.go
index d9b87b5e..a1d560e7 100644
--- a/object/role.go
+++ b/object/role.go
@@ -44,7 +44,7 @@ func GetRoleCount(owner, field, value string) (int64, error) {
func GetRoles(owner string) ([]*Role, error) {
roles := []*Role{}
- err := adapter.Engine.Desc("created_time").Find(&roles, &Role{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&roles, &Role{Owner: owner})
if err != nil {
return roles, err
}
@@ -69,7 +69,7 @@ func getRole(owner string, name string) (*Role, error) {
}
role := Role{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&role)
+ existed, err := ormer.Engine.Get(&role)
if err != nil {
return &role, err
}
@@ -137,7 +137,7 @@ func UpdateRole(id string, role *Role) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(role)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(role)
if err != nil {
return false, err
}
@@ -178,7 +178,7 @@ func UpdateRole(id string, role *Role) (bool, error) {
}
func AddRole(role *Role) (bool, error) {
- affected, err := adapter.Engine.Insert(role)
+ affected, err := ormer.Engine.Insert(role)
if err != nil {
return false, err
}
@@ -190,7 +190,7 @@ func AddRoles(roles []*Role) bool {
if len(roles) == 0 {
return false
}
- affected, err := adapter.Engine.Insert(roles)
+ affected, err := ormer.Engine.Insert(roles)
if err != nil {
if !strings.Contains(err.Error(), "Duplicate entry") {
panic(err)
@@ -240,7 +240,7 @@ func DeleteRole(role *Role) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{role.Owner, role.Name}).Delete(&Role{})
+ affected, err := ormer.Engine.ID(core.PK{role.Owner, role.Name}).Delete(&Role{})
if err != nil {
return false, err
}
@@ -254,7 +254,7 @@ func (role *Role) GetId() string {
func GetRolesByUser(userId string) ([]*Role, error) {
roles := []*Role{}
- err := adapter.Engine.Where("users like ?", "%"+userId+"\"%").Find(&roles)
+ err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&roles)
if err != nil {
return roles, err
}
@@ -278,7 +278,7 @@ func GetRolesByUser(userId string) ([]*Role, error) {
}
func roleChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -287,7 +287,7 @@ func roleChangeTrigger(oldName string, newName string) error {
}
var roles []*Role
- err = adapter.Engine.Find(&roles)
+ err = ormer.Engine.Find(&roles)
if err != nil {
return err
}
@@ -306,7 +306,7 @@ func roleChangeTrigger(oldName string, newName string) error {
}
var permissions []*Permission
- err = adapter.Engine.Find(&permissions)
+ err = ormer.Engine.Find(&permissions)
if err != nil {
return err
}
@@ -338,7 +338,7 @@ func GetMaskedRoles(roles []*Role) []*Role {
func GetRolesByNamePrefix(owner string, prefix string) ([]*Role, error) {
roles := []*Role{}
- err := adapter.Engine.Where("owner=? and name like ?", owner, prefix+"%").Find(&roles)
+ err := ormer.Engine.Where("owner=? and name like ?", owner, prefix+"%").Find(&roles)
if err != nil {
return roles, err
}
diff --git a/object/session.go b/object/session.go
index 3a38dea7..bbc3704f 100644
--- a/object/session.go
+++ b/object/session.go
@@ -40,9 +40,9 @@ func GetSessions(owner string) ([]*Session, error) {
sessions := []*Session{}
var err error
if owner != "" {
- err = adapter.Engine.Desc("created_time").Where("owner = ?", owner).Find(&sessions)
+ err = ormer.Engine.Desc("created_time").Where("owner = ?", owner).Find(&sessions)
} else {
- err = adapter.Engine.Desc("created_time").Find(&sessions)
+ err = ormer.Engine.Desc("created_time").Find(&sessions)
}
if err != nil {
return sessions, err
@@ -70,7 +70,7 @@ func GetSessionCount(owner, field, value string) (int64, error) {
func GetSingleSession(id string) (*Session, error) {
owner, name, application := util.GetOwnerAndNameAndOtherFromId(id)
session := Session{Owner: owner, Name: name, Application: application}
- get, err := adapter.Engine.Get(&session)
+ get, err := ormer.Engine.Get(&session)
if err != nil {
return &session, err
}
@@ -91,7 +91,7 @@ func UpdateSession(id string, session *Session) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name, application}).Update(session)
+ affected, err := ormer.Engine.ID(core.PK{owner, name, application}).Update(session)
if err != nil {
return false, err
}
@@ -114,7 +114,7 @@ func AddSession(session *Session) (bool, error) {
if dbSession == nil {
session.CreatedTime = util.GetCurrentTime()
- affected, err := adapter.Engine.Insert(session)
+ affected, err := ormer.Engine.Insert(session)
if err != nil {
return false, err
}
@@ -150,7 +150,7 @@ func DeleteSession(id string) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name, application}).Delete(&Session{})
+ affected, err := ormer.Engine.ID(core.PK{owner, name, application}).Delete(&Session{})
if err != nil {
return false, err
}
diff --git a/object/subscription.go b/object/subscription.go
index 712f3333..2aba13fa 100644
--- a/object/subscription.go
+++ b/object/subscription.go
@@ -69,7 +69,7 @@ func GetSubscriptionCount(owner, field, value string) (int64, error) {
func GetSubscriptions(owner string) ([]*Subscription, error) {
subscriptions := []*Subscription{}
- err := adapter.Engine.Desc("created_time").Find(&subscriptions, &Subscription{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&subscriptions, &Subscription{Owner: owner})
if err != nil {
return subscriptions, err
}
@@ -94,7 +94,7 @@ func getSubscription(owner string, name string) (*Subscription, error) {
}
subscription := Subscription{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&subscription)
+ existed, err := ormer.Engine.Get(&subscription)
if err != nil {
return nil, err
}
@@ -119,7 +119,7 @@ func UpdateSubscription(id string, subscription *Subscription) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(subscription)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(subscription)
if err != nil {
return false, err
}
@@ -128,7 +128,7 @@ func UpdateSubscription(id string, subscription *Subscription) (bool, error) {
}
func AddSubscription(subscription *Subscription) (bool, error) {
- affected, err := adapter.Engine.Insert(subscription)
+ affected, err := ormer.Engine.Insert(subscription)
if err != nil {
return false, err
}
@@ -137,7 +137,7 @@ func AddSubscription(subscription *Subscription) (bool, error) {
}
func DeleteSubscription(subscription *Subscription) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{subscription.Owner, subscription.Name}).Delete(&Subscription{})
+ affected, err := ormer.Engine.ID(core.PK{subscription.Owner, subscription.Name}).Delete(&Subscription{})
if err != nil {
return false, err
}
diff --git a/object/syncer.go b/object/syncer.go
index 09037076..f17c3645 100644
--- a/object/syncer.go
+++ b/object/syncer.go
@@ -53,7 +53,7 @@ type Syncer struct {
IsReadOnly bool `json:"isReadOnly"`
IsEnabled bool `json:"isEnabled"`
- Adapter *Adapter `xorm:"-" json:"-"`
+ Ormer *Ormer `xorm:"-" json:"-"`
}
func GetSyncerCount(owner, organization, field, value string) (int64, error) {
@@ -63,7 +63,7 @@ func GetSyncerCount(owner, organization, field, value string) (int64, error) {
func GetSyncers(owner string) ([]*Syncer, error) {
syncers := []*Syncer{}
- err := adapter.Engine.Desc("created_time").Find(&syncers, &Syncer{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&syncers, &Syncer{Owner: owner})
if err != nil {
return syncers, err
}
@@ -73,7 +73,7 @@ func GetSyncers(owner string) ([]*Syncer, error) {
func GetOrganizationSyncers(owner, organization string) ([]*Syncer, error) {
syncers := []*Syncer{}
- err := adapter.Engine.Desc("created_time").Find(&syncers, &Syncer{Owner: owner, Organization: organization})
+ err := ormer.Engine.Desc("created_time").Find(&syncers, &Syncer{Owner: owner, Organization: organization})
if err != nil {
return syncers, err
}
@@ -98,7 +98,7 @@ func getSyncer(owner string, name string) (*Syncer, error) {
}
syncer := Syncer{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&syncer)
+ existed, err := ormer.Engine.Get(&syncer)
if err != nil {
return &syncer, err
}
@@ -141,7 +141,7 @@ func UpdateSyncer(id string, syncer *Syncer) (bool, error) {
return false, nil
}
- session := adapter.Engine.ID(core.PK{owner, name}).AllCols()
+ session := ormer.Engine.ID(core.PK{owner, name}).AllCols()
if syncer.Password == "***" {
session.Omit("password")
}
@@ -172,7 +172,7 @@ func updateSyncerErrorText(syncer *Syncer, line string) (bool, error) {
s.ErrorText = s.ErrorText + line
- affected, err := adapter.Engine.ID(core.PK{s.Owner, s.Name}).Cols("error_text").Update(s)
+ affected, err := ormer.Engine.ID(core.PK{s.Owner, s.Name}).Cols("error_text").Update(s)
if err != nil {
return false, err
}
@@ -181,7 +181,7 @@ func updateSyncerErrorText(syncer *Syncer, line string) (bool, error) {
}
func AddSyncer(syncer *Syncer) (bool, error) {
- affected, err := adapter.Engine.Insert(syncer)
+ affected, err := ormer.Engine.Insert(syncer)
if err != nil {
return false, err
}
@@ -197,7 +197,7 @@ func AddSyncer(syncer *Syncer) (bool, error) {
}
func DeleteSyncer(syncer *Syncer) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{syncer.Owner, syncer.Name}).Delete(&Syncer{})
+ affected, err := ormer.Engine.ID(core.PK{syncer.Owner, syncer.Name}).Delete(&Syncer{})
if err != nil {
return false, err
}
diff --git a/object/syncer_affiliation.go b/object/syncer_affiliation.go
index 8b0d86b2..e8c0713c 100644
--- a/object/syncer_affiliation.go
+++ b/object/syncer_affiliation.go
@@ -21,7 +21,7 @@ type Affiliation struct {
func (syncer *Syncer) getAffiliations() ([]*Affiliation, error) {
affiliations := []*Affiliation{}
- err := syncer.Adapter.Engine.Table(syncer.AffiliationTable).Asc("id").Find(&affiliations)
+ err := syncer.Ormer.Engine.Table(syncer.AffiliationTable).Asc("id").Find(&affiliations)
if err != nil {
return nil, err
}
diff --git a/object/syncer_user.go b/object/syncer_user.go
index a592e3f8..99e67b54 100644
--- a/object/syncer_user.go
+++ b/object/syncer_user.go
@@ -32,7 +32,7 @@ type Credential struct {
func (syncer *Syncer) getOriginalUsers() ([]*OriginalUser, error) {
sql := fmt.Sprintf("select * from %s", syncer.getTable())
- results, err := syncer.Adapter.Engine.QueryString(sql)
+ results, err := syncer.Ormer.Engine.QueryString(sql)
if err != nil {
return nil, err
}
@@ -67,7 +67,7 @@ func (syncer *Syncer) addUser(user *OriginalUser) (bool, error) {
keyString, valueString := syncer.getSqlKeyValueStringFromMap(m)
sql := fmt.Sprintf("insert into %s (%s) values (%s)", syncer.getTable(), keyString, valueString)
- res, err := syncer.Adapter.Engine.Exec(sql)
+ res, err := syncer.Ormer.Engine.Exec(sql)
if err != nil {
return false, err
}
@@ -108,7 +108,7 @@ func (syncer *Syncer) updateUser(user *OriginalUser) (bool, error) {
setString := syncer.getSqlSetStringFromMap(m)
sql := fmt.Sprintf("update %s set %s where %s = %s", syncer.getTable(), setString, syncer.TablePrimaryKey, pkValue)
- res, err := syncer.Adapter.Engine.Exec(sql)
+ res, err := syncer.Ormer.Engine.Exec(sql)
if err != nil {
return false, err
}
@@ -138,7 +138,7 @@ func (syncer *Syncer) updateUserForOriginalFields(user *User) (bool, error) {
columns := syncer.getCasdoorColumns()
columns = append(columns, "affiliation", "hash", "pre_hash")
- affected, err := adapter.Engine.ID(core.PK{oldUser.Owner, oldUser.Name}).Cols(columns...).Update(user)
+ affected, err := ormer.Engine.ID(core.PK{oldUser.Owner, oldUser.Name}).Cols(columns...).Update(user)
if err != nil {
return false, err
}
@@ -160,7 +160,7 @@ func (syncer *Syncer) calculateHash(user *OriginalUser) string {
}
func (syncer *Syncer) initAdapter() {
- if syncer.Adapter == nil {
+ if syncer.Ormer == nil {
var dataSourceName string
if syncer.DatabaseType == "mssql" {
dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", syncer.User, syncer.Password, syncer.Host, syncer.Port, syncer.Database)
@@ -174,7 +174,7 @@ func (syncer *Syncer) initAdapter() {
dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
}
- syncer.Adapter = NewAdapter(syncer.DatabaseType, dataSourceName, syncer.Database)
+ syncer.Ormer = NewAdapter(syncer.DatabaseType, dataSourceName, syncer.Database)
}
}
diff --git a/object/syncer_util.go b/object/syncer_util.go
index 7c905c29..a0dad5e9 100644
--- a/object/syncer_util.go
+++ b/object/syncer_util.go
@@ -196,7 +196,7 @@ func (syncer *Syncer) getOriginalUsersFromMap(results []map[string]string) []*Or
if syncer.Type == "Keycloak" {
// query and set password and password salt from credential table
sql := fmt.Sprintf("select * from credential where type = 'password' and user_id = '%s'", originalUser.Id)
- credentialResult, _ := syncer.Adapter.Engine.QueryString(sql)
+ credentialResult, _ := syncer.Ormer.Engine.QueryString(sql)
if len(credentialResult) > 0 {
credential := Credential{}
_ = json.Unmarshal([]byte(credentialResult[0]["SECRET_DATA"]), &credential)
@@ -206,7 +206,7 @@ func (syncer *Syncer) getOriginalUsersFromMap(results []map[string]string) []*Or
// query and set signup application from user group table
sql = fmt.Sprintf("select name from keycloak_group where id = "+
"(select group_id as gid from user_group_membership where user_id = '%s')", originalUser.Id)
- groupResult, _ := syncer.Adapter.Engine.QueryString(sql)
+ groupResult, _ := syncer.Ormer.Engine.QueryString(sql)
if len(groupResult) > 0 {
originalUser.SignupApplication = groupResult[0]["name"]
}
diff --git a/object/token.go b/object/token.go
index 4f5db899..fa8be8e3 100644
--- a/object/token.go
+++ b/object/token.go
@@ -98,7 +98,7 @@ func GetTokenCount(owner, organization, field, value string) (int64, error) {
func GetTokens(owner string, organization string) ([]*Token, error) {
tokens := []*Token{}
- err := adapter.Engine.Desc("created_time").Find(&tokens, &Token{Owner: owner, Organization: organization})
+ err := ormer.Engine.Desc("created_time").Find(&tokens, &Token{Owner: owner, Organization: organization})
return tokens, err
}
@@ -115,7 +115,7 @@ func getToken(owner string, name string) (*Token, error) {
}
token := Token{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&token)
+ existed, err := ormer.Engine.Get(&token)
if err != nil {
return nil, err
}
@@ -129,7 +129,7 @@ func getToken(owner string, name string) (*Token, error) {
func getTokenByCode(code string) (*Token, error) {
token := Token{Code: code}
- existed, err := adapter.Engine.Get(&token)
+ existed, err := ormer.Engine.Get(&token)
if err != nil {
return nil, err
}
@@ -142,7 +142,7 @@ func getTokenByCode(code string) (*Token, error) {
}
func updateUsedByCode(token *Token) bool {
- affected, err := adapter.Engine.Where("code=?", token.Code).Cols("code_is_used").Update(token)
+ affected, err := ormer.Engine.Where("code=?", token.Code).Cols("code_is_used").Update(token)
if err != nil {
panic(err)
}
@@ -167,7 +167,7 @@ func UpdateToken(id string, token *Token) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(token)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(token)
if err != nil {
return false, err
}
@@ -176,7 +176,7 @@ func UpdateToken(id string, token *Token) (bool, error) {
}
func AddToken(token *Token) (bool, error) {
- affected, err := adapter.Engine.Insert(token)
+ affected, err := ormer.Engine.Insert(token)
if err != nil {
return false, err
}
@@ -185,7 +185,7 @@ func AddToken(token *Token) (bool, error) {
}
func DeleteToken(token *Token) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{token.Owner, token.Name}).Delete(&Token{})
+ affected, err := ormer.Engine.ID(core.PK{token.Owner, token.Name}).Delete(&Token{})
if err != nil {
return false, err
}
@@ -195,7 +195,7 @@ func DeleteToken(token *Token) (bool, error) {
func ExpireTokenByAccessToken(accessToken string) (bool, *Application, *Token, error) {
token := Token{AccessToken: accessToken}
- existed, err := adapter.Engine.Get(&token)
+ existed, err := ormer.Engine.Get(&token)
if err != nil {
return false, nil, nil, err
}
@@ -205,7 +205,7 @@ func ExpireTokenByAccessToken(accessToken string) (bool, *Application, *Token, e
}
token.ExpiresIn = 0
- affected, err := adapter.Engine.ID(core.PK{token.Owner, token.Name}).Cols("expires_in").Update(&token)
+ affected, err := ormer.Engine.ID(core.PK{token.Owner, token.Name}).Cols("expires_in").Update(&token)
if err != nil {
return false, nil, nil, err
}
@@ -221,7 +221,7 @@ func ExpireTokenByAccessToken(accessToken string) (bool, *Application, *Token, e
func GetTokenByAccessToken(accessToken string) (*Token, error) {
// Check if the accessToken is in the database
token := Token{AccessToken: accessToken}
- existed, err := adapter.Engine.Get(&token)
+ existed, err := ormer.Engine.Get(&token)
if err != nil {
return nil, err
}
@@ -235,7 +235,7 @@ func GetTokenByAccessToken(accessToken string) (*Token, error) {
func GetTokenByTokenAndApplication(token string, application string) (*Token, error) {
tokenResult := Token{}
- existed, err := adapter.Engine.Where("(refresh_token = ? or access_token = ? ) and application = ?", token, token, application).Get(&tokenResult)
+ existed, err := ormer.Engine.Where("(refresh_token = ? or access_token = ? ) and application = ?", token, token, application).Get(&tokenResult)
if err != nil {
return nil, err
}
@@ -440,7 +440,7 @@ func RefreshToken(grantType string, refreshToken string, scope string, clientId
}
// check whether the refresh token is valid, and has not expired.
token := Token{RefreshToken: refreshToken}
- existed, err := adapter.Engine.Get(&token)
+ existed, err := ormer.Engine.Get(&token)
if err != nil || !existed {
return &TokenError{
Error: InvalidGrant,
diff --git a/object/user.go b/object/user.go
index 60048b10..ab5adb79 100644
--- a/object/user.go
+++ b/object/user.go
@@ -207,7 +207,7 @@ func GetGlobalUserCount(field, value string) (int64, error) {
func GetGlobalUsers() ([]*User, error) {
users := []*User{}
- err := adapter.Engine.Desc("created_time").Find(&users)
+ err := ormer.Engine.Desc("created_time").Find(&users)
if err != nil {
return nil, err
}
@@ -237,12 +237,12 @@ func GetUserCount(owner, field, value string, groupName string) (int64, error) {
}
func GetOnlineUserCount(owner string, isOnline int) (int64, error) {
- return adapter.Engine.Where("is_online = ?", isOnline).Count(&User{Owner: owner})
+ return ormer.Engine.Where("is_online = ?", isOnline).Count(&User{Owner: owner})
}
func GetUsers(owner string) ([]*User, error) {
users := []*User{}
- err := adapter.Engine.Desc("created_time").Find(&users, &User{Owner: owner})
+ err := ormer.Engine.Desc("created_time").Find(&users, &User{Owner: owner})
if err != nil {
return nil, err
}
@@ -252,7 +252,7 @@ func GetUsers(owner string) ([]*User, error) {
func GetUsersByTag(owner string, tag string) ([]*User, error) {
users := []*User{}
- err := adapter.Engine.Desc("created_time").Find(&users, &User{Owner: owner, Tag: tag})
+ err := ormer.Engine.Desc("created_time").Find(&users, &User{Owner: owner, Tag: tag})
if err != nil {
return nil, err
}
@@ -262,7 +262,7 @@ func GetUsersByTag(owner string, tag string) ([]*User, error) {
func GetSortedUsers(owner string, sorter string, limit int) ([]*User, error) {
users := []*User{}
- err := adapter.Engine.Desc(sorter).Limit(limit, 0).Find(&users, &User{Owner: owner})
+ err := ormer.Engine.Desc(sorter).Limit(limit, 0).Find(&users, &User{Owner: owner})
if err != nil {
return nil, err
}
@@ -291,7 +291,7 @@ func getUser(owner string, name string) (*User, error) {
}
user := User{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -309,7 +309,7 @@ func getUserById(owner string, id string) (*User, error) {
}
user := User{Owner: owner, Id: id}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -326,7 +326,7 @@ func getUserByWechatId(owner string, wechatOpenId string, wechatUnionId string)
wechatUnionId = wechatOpenId
}
user := &User{}
- existed, err := adapter.Engine.Where("owner = ?", owner).Where("wechat = ? OR wechat = ?", wechatOpenId, wechatUnionId).Get(user)
+ existed, err := ormer.Engine.Where("owner = ?", owner).Where("wechat = ? OR wechat = ?", wechatOpenId, wechatUnionId).Get(user)
if err != nil {
return nil, err
}
@@ -344,7 +344,7 @@ func GetUserByEmail(owner string, email string) (*User, error) {
}
user := User{Owner: owner, Email: email}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -362,7 +362,7 @@ func GetUserByPhone(owner string, phone string) (*User, error) {
}
user := User{Owner: owner, Phone: phone}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -380,7 +380,7 @@ func GetUserByUserId(owner string, userId string) (*User, error) {
}
user := User{Owner: owner, Id: userId}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -397,7 +397,7 @@ func GetUserByAccessKey(accessKey string) (*User, error) {
return nil, nil
}
user := User{AccessKey: accessKey}
- existed, err := adapter.Engine.Get(&user)
+ existed, err := ormer.Engine.Get(&user)
if err != nil {
return nil, err
}
@@ -471,7 +471,7 @@ func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) {
func GetLastUser(owner string) (*User, error) {
user := User{Owner: owner}
- existed, err := adapter.Engine.Desc("created_time", "id").Get(&user)
+ existed, err := ormer.Engine.Desc("created_time", "id").Get(&user)
if err != nil {
return nil, err
}
@@ -546,7 +546,7 @@ func updateUser(id string, user *User, columns []string) (int64, error) {
return 0, err
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).Cols(columns...).Update(user)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).Cols(columns...).Update(user)
if err != nil {
return 0, err
}
@@ -584,7 +584,7 @@ func UpdateUserForAllFields(id string, user *User) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(user)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(user)
if err != nil {
return false, err
}
@@ -638,7 +638,7 @@ func AddUser(user *User) (bool, error) {
}
user.Ranking = int(count + 1)
- affected, err := adapter.Engine.Insert(user)
+ affected, err := ormer.Engine.Insert(user)
if err != nil {
return false, err
}
@@ -670,7 +670,7 @@ func AddUsers(users []*User) (bool, error) {
}
}
- affected, err := adapter.Engine.Insert(users)
+ affected, err := ormer.Engine.Insert(users)
if err != nil {
if !strings.Contains(err.Error(), "Duplicate entry") {
return false, err
@@ -715,7 +715,7 @@ func DeleteUser(user *User) (bool, error) {
return false, err
}
- affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Delete(&User{})
+ affected, err := ormer.Engine.ID(core.PK{user.Owner, user.Name}).Delete(&User{})
if err != nil {
return false, err
}
@@ -779,7 +779,7 @@ func ExtendUserWithRolesAndPermissions(user *User) (err error) {
}
func userChangeTrigger(oldName string, newName string) error {
- session := adapter.Engine.NewSession()
+ session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
@@ -788,7 +788,7 @@ func userChangeTrigger(oldName string, newName string) error {
}
var roles []*Role
- err = adapter.Engine.Find(&roles)
+ err = ormer.Engine.Find(&roles)
if err != nil {
return err
}
@@ -808,7 +808,7 @@ func userChangeTrigger(oldName string, newName string) error {
}
var permissions []*Permission
- err = adapter.Engine.Find(&permissions)
+ err = ormer.Engine.Find(&permissions)
if err != nil {
return err
}
diff --git a/object/user_test.go b/object/user_test.go
index 858f360a..6ae251ba 100644
--- a/object/user_test.go
+++ b/object/user_test.go
@@ -25,7 +25,7 @@ import (
)
func updateUserColumn(column string, user *User) bool {
- affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols(column).Update(user)
+ affected, err := ormer.Engine.ID(core.PK{user.Owner, user.Name}).Cols(column).Update(user)
if err != nil {
panic(err)
}
diff --git a/object/user_util.go b/object/user_util.go
index 75588272..2122f5b1 100644
--- a/object/user_util.go
+++ b/object/user_util.go
@@ -30,7 +30,7 @@ func GetUserByField(organizationName string, field string, value string) (*User,
}
user := User{Owner: organizationName}
- existed, err := adapter.Engine.Where(fmt.Sprintf("%s=?", strings.ToLower(field)), value).Get(&user)
+ existed, err := ormer.Engine.Where(fmt.Sprintf("%s=?", strings.ToLower(field)), value).Get(&user)
if err != nil {
return nil, err
}
@@ -95,7 +95,7 @@ func SetUserField(user *User, field string, value string) (bool, error) {
bean[strings.ToLower(field)] = value
}
- affected, err := adapter.Engine.Table(user).ID(core.PK{user.Owner, user.Name}).Update(bean)
+ affected, err := ormer.Engine.Table(user).ID(core.PK{user.Owner, user.Name}).Update(bean)
if err != nil {
return false, err
}
@@ -110,7 +110,7 @@ func SetUserField(user *User, field string, value string) (bool, error) {
return false, err
}
- _, err = adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("hash").Update(user)
+ _, err = ormer.Engine.ID(core.PK{user.Owner, user.Name}).Cols("hash").Update(user)
if err != nil {
return false, err
}
@@ -191,7 +191,7 @@ func ClearUserOAuthProperties(user *User, providerType string) (bool, error) {
}
}
- affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("properties").Update(user)
+ affected, err := ormer.Engine.ID(core.PK{user.Owner, user.Name}).Cols("properties").Update(user)
if err != nil {
return false, err
}
diff --git a/object/verification.go b/object/verification.go
index 426d9bfd..7ff8f741 100644
--- a/object/verification.go
+++ b/object/verification.go
@@ -66,7 +66,7 @@ func IsAllowSend(user *User, remoteAddr, recordType string) error {
if user != nil {
record.User = user.GetId()
}
- has, err := adapter.Engine.Desc("created_time").Get(&record)
+ has, err := ormer.Engine.Desc("created_time").Get(&record)
if err != nil {
return err
}
@@ -143,7 +143,7 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT
record.Time = time.Now().Unix()
record.IsUsed = false
- _, err := adapter.Engine.Insert(record)
+ _, err := ormer.Engine.Insert(record)
if err != nil {
return err
}
@@ -154,7 +154,7 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT
func getVerificationRecord(dest string) (*VerificationRecord, error) {
var record VerificationRecord
record.Receiver = dest
- has, err := adapter.Engine.Desc("time").Where("is_used = false").Get(&record)
+ has, err := ormer.Engine.Desc("time").Where("is_used = false").Get(&record)
if err != nil {
return nil, err
}
@@ -198,7 +198,7 @@ func DisableVerificationCode(dest string) (err error) {
}
record.IsUsed = true
- _, err = adapter.Engine.ID(core.PK{record.Owner, record.Name}).AllCols().Update(record)
+ _, err = ormer.Engine.ID(core.PK{record.Owner, record.Name}).AllCols().Update(record)
return
}
diff --git a/object/webhook.go b/object/webhook.go
index 9b4e8a88..aa9331ac 100644
--- a/object/webhook.go
+++ b/object/webhook.go
@@ -49,7 +49,7 @@ func GetWebhookCount(owner, organization, field, value string) (int64, error) {
func GetWebhooks(owner string, organization string) ([]*Webhook, error) {
webhooks := []*Webhook{}
- err := adapter.Engine.Desc("created_time").Find(&webhooks, &Webhook{Owner: owner, Organization: organization})
+ err := ormer.Engine.Desc("created_time").Find(&webhooks, &Webhook{Owner: owner, Organization: organization})
if err != nil {
return webhooks, err
}
@@ -70,7 +70,7 @@ func GetPaginationWebhooks(owner, organization string, offset, limit int, field,
func getWebhooksByOrganization(organization string) ([]*Webhook, error) {
webhooks := []*Webhook{}
- err := adapter.Engine.Desc("created_time").Find(&webhooks, &Webhook{Organization: organization})
+ err := ormer.Engine.Desc("created_time").Find(&webhooks, &Webhook{Organization: organization})
if err != nil {
return webhooks, err
}
@@ -84,7 +84,7 @@ func getWebhook(owner string, name string) (*Webhook, error) {
}
webhook := Webhook{Owner: owner, Name: name}
- existed, err := adapter.Engine.Get(&webhook)
+ existed, err := ormer.Engine.Get(&webhook)
if err != nil {
return &webhook, err
}
@@ -109,7 +109,7 @@ func UpdateWebhook(id string, webhook *Webhook) (bool, error) {
return false, nil
}
- affected, err := adapter.Engine.ID(core.PK{owner, name}).AllCols().Update(webhook)
+ affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(webhook)
if err != nil {
return false, err
}
@@ -118,7 +118,7 @@ func UpdateWebhook(id string, webhook *Webhook) (bool, error) {
}
func AddWebhook(webhook *Webhook) (bool, error) {
- affected, err := adapter.Engine.Insert(webhook)
+ affected, err := ormer.Engine.Insert(webhook)
if err != nil {
return false, err
}
@@ -127,7 +127,7 @@ func AddWebhook(webhook *Webhook) (bool, error) {
}
func DeleteWebhook(webhook *Webhook) (bool, error) {
- affected, err := adapter.Engine.ID(core.PK{webhook.Owner, webhook.Name}).Delete(&Webhook{})
+ affected, err := ormer.Engine.ID(core.PK{webhook.Owner, webhook.Name}).Delete(&Webhook{})
if err != nil {
return false, err
}
diff --git a/routers/authz_filter.go b/routers/authz_filter.go
index 7a59fa62..f8a972c6 100644
--- a/routers/authz_filter.go
+++ b/routers/authz_filter.go
@@ -150,7 +150,7 @@ func getUrlPath(urlPath string) string {
return urlPath
}
-func AuthzFilter(ctx *context.Context) {
+func ApiFilter(ctx *context.Context) {
subOwner, subName := getSubject(ctx)
method := ctx.Request.Method
urlPath := getUrlPath(ctx.Request.URL.Path)
diff --git a/routers/router.go b/routers/router.go
index e3e33495..4ea4cc8f 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -117,11 +117,11 @@ func initAPI() {
beego.Router("/api/add-model", &controllers.ApiController{}, "POST:AddModel")
beego.Router("/api/delete-model", &controllers.ApiController{}, "POST:DeleteModel")
- beego.Router("/api/get-adapters", &controllers.ApiController{}, "GET:GetCasbinAdapters")
- beego.Router("/api/get-adapter", &controllers.ApiController{}, "GET:GetCasbinAdapter")
- beego.Router("/api/update-adapter", &controllers.ApiController{}, "POST:UpdateCasbinAdapter")
- beego.Router("/api/add-adapter", &controllers.ApiController{}, "POST:AddCasbinAdapter")
- beego.Router("/api/delete-adapter", &controllers.ApiController{}, "POST:DeleteCasbinAdapter")
+ beego.Router("/api/get-adapters", &controllers.ApiController{}, "GET:GetAdapters")
+ beego.Router("/api/get-adapter", &controllers.ApiController{}, "GET:GetAdapter")
+ beego.Router("/api/update-adapter", &controllers.ApiController{}, "POST:UpdateAdapter")
+ beego.Router("/api/add-adapter", &controllers.ApiController{}, "POST:AddAdapter")
+ beego.Router("/api/delete-adapter", &controllers.ApiController{}, "POST:DeleteAdapter")
beego.Router("/api/sync-policies", &controllers.ApiController{}, "GET:SyncPolicies")
beego.Router("/api/update-policy", &controllers.ApiController{}, "POST:UpdatePolicy")
beego.Router("/api/add-policy", &controllers.ApiController{}, "POST:AddPolicy")
@@ -261,18 +261,6 @@ func initAPI() {
beego.Router("/api/send-email", &controllers.ApiController{}, "POST:SendEmail")
beego.Router("/api/send-sms", &controllers.ApiController{}, "POST:SendSms")
- beego.Router("/.well-known/openid-configuration", &controllers.RootController{}, "GET:GetOidcDiscovery")
- beego.Router("/.well-known/jwks", &controllers.RootController{}, "*:GetJwks")
-
- beego.Router("/cas/:organization/:application/serviceValidate", &controllers.RootController{}, "GET:CasServiceValidate")
- beego.Router("/cas/:organization/:application/proxyValidate", &controllers.RootController{}, "GET:CasProxyValidate")
- beego.Router("/cas/:organization/:application/proxy", &controllers.RootController{}, "GET:CasProxy")
- beego.Router("/cas/:organization/:application/validate", &controllers.RootController{}, "GET:CasValidate")
-
- beego.Router("/cas/:organization/:application/p3/serviceValidate", &controllers.RootController{}, "GET:CasP3ServiceAndProxyValidate")
- beego.Router("/cas/:organization/:application/p3/proxyValidate", &controllers.RootController{}, "GET:CasP3ServiceAndProxyValidate")
- beego.Router("/cas/:organization/:application/samlValidate", &controllers.RootController{}, "POST:SamlValidate")
-
beego.Router("/api/webauthn/signup/begin", &controllers.ApiController{}, "Get:WebAuthnSignupBegin")
beego.Router("/api/webauthn/signup/finish", &controllers.ApiController{}, "Post:WebAuthnSignupFinish")
beego.Router("/api/webauthn/signin/begin", &controllers.ApiController{}, "Get:WebAuthnSigninBegin")
@@ -290,4 +278,16 @@ func initAPI() {
beego.Router("/api/get-prometheus-info", &controllers.ApiController{}, "GET:GetPrometheusInfo")
beego.Handler("/api/metrics", promhttp.Handler())
+
+ beego.Router("/.well-known/openid-configuration", &controllers.RootController{}, "GET:GetOidcDiscovery")
+ beego.Router("/.well-known/jwks", &controllers.RootController{}, "*:GetJwks")
+
+ beego.Router("/cas/:organization/:application/serviceValidate", &controllers.RootController{}, "GET:CasServiceValidate")
+ beego.Router("/cas/:organization/:application/proxyValidate", &controllers.RootController{}, "GET:CasProxyValidate")
+ beego.Router("/cas/:organization/:application/proxy", &controllers.RootController{}, "GET:CasProxy")
+ beego.Router("/cas/:organization/:application/validate", &controllers.RootController{}, "GET:CasValidate")
+
+ beego.Router("/cas/:organization/:application/p3/serviceValidate", &controllers.RootController{}, "GET:CasP3ServiceAndProxyValidate")
+ beego.Router("/cas/:organization/:application/p3/proxyValidate", &controllers.RootController{}, "GET:CasP3ServiceAndProxyValidate")
+ beego.Router("/cas/:organization/:application/samlValidate", &controllers.RootController{}, "POST:SamlValidate")
}
diff --git a/swagger/swagger.json b/swagger/swagger.json
index 5c1f5d94..c9e61e14 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -53,7 +53,7 @@
"Adapter API"
],
"description": "add adapter",
- "operationId": "ApiController.AddCasbinAdapter",
+ "operationId": "ApiController.AddAdapter",
"parameters": [
{
"in": "body",
@@ -999,7 +999,7 @@
"Adapter API"
],
"description": "delete adapter",
- "operationId": "ApiController.DeleteCasbinAdapter",
+ "operationId": "ApiController.DeleteAdapter",
"parameters": [
{
"in": "body",
@@ -1751,7 +1751,7 @@
"Adapter API"
],
"description": "get adapter",
- "operationId": "ApiController.GetCasbinAdapter",
+ "operationId": "ApiController.GetAdapter",
"parameters": [
{
"in": "query",
@@ -1777,7 +1777,7 @@
"Adapter API"
],
"description": "get adapters",
- "operationId": "ApiController.GetCasbinAdapters",
+ "operationId": "ApiController.GetAdapters",
"parameters": [
{
"in": "query",
@@ -4382,7 +4382,7 @@
"Adapter API"
],
"description": "update adapter",
- "operationId": "ApiController.UpdateCasbinAdapter",
+ "operationId": "ApiController.UpdateAdapter",
"parameters": [
{
"in": "query",
diff --git a/swagger/swagger.yml b/swagger/swagger.yml
index 2b51a7df..21ee9a40 100644
--- a/swagger/swagger.yml
+++ b/swagger/swagger.yml
@@ -36,7 +36,7 @@ paths:
tags:
- Adapter API
description: add adapter
- operationId: ApiController.AddCasbinAdapter
+ operationId: ApiController.AddAdapter
parameters:
- in: body
name: body
@@ -647,7 +647,7 @@ paths:
tags:
- Adapter API
description: delete adapter
- operationId: ApiController.DeleteCasbinAdapter
+ operationId: ApiController.DeleteAdapter
parameters:
- in: body
name: body
@@ -1131,7 +1131,7 @@ paths:
tags:
- Adapter API
description: get adapter
- operationId: ApiController.GetCasbinAdapter
+ operationId: ApiController.GetAdapter
parameters:
- in: query
name: id
@@ -1148,7 +1148,7 @@ paths:
tags:
- Adapter API
description: get adapters
- operationId: ApiController.GetCasbinAdapters
+ operationId: ApiController.GetAdapters
parameters:
- in: query
name: owner
@@ -2861,7 +2861,7 @@ paths:
tags:
- Adapter API
description: update adapter
- operationId: ApiController.UpdateCasbinAdapter
+ operationId: ApiController.UpdateAdapter
parameters:
- in: query
name: id
diff --git a/web/src/AdapterEditPage.js b/web/src/AdapterEditPage.js
index ab01429b..c5edd00b 100644
--- a/web/src/AdapterEditPage.js
+++ b/web/src/AdapterEditPage.js
@@ -13,7 +13,7 @@
// limitations under the License.
import React from "react";
-import {Button, Card, Col, Input, InputNumber, Row, Select, Switch} from "antd";
+import {Button, Card, Col, Input, Row, Select, Switch} from "antd";
import * as AdapterBackend from "./backend/AdapterBackend";
import * as OrganizationBackend from "./backend/OrganizationBackend";
import * as Setting from "./Setting";
@@ -88,9 +88,9 @@ class AdapterEditPage extends React.Component {
}
parseAdapterField(key, value) {
- if (["port"].includes(key)) {
- value = Setting.myParseInt(value);
- }
+ // if ([].includes(key)) {
+ // value = Setting.myParseInt(value);
+ // }
return value;
}
@@ -104,6 +104,73 @@ class AdapterEditPage extends React.Component {
});
}
+ renderDataSourceNameConfig() {
+ if (Setting.builtInObject(this.state.adapter)) {
+ return null;
+ }
+ return (
+ {
+ this.state.adapter.databaseType === "sqlite3" ?
+ (
+
+
+ {Setting.getLabel(i18next.t("syncer:File"), i18next.t("provider:File - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("file", e.target.value);
+ }} />
+
+
+ ) : (
+
+
+
+ {Setting.getLabel(i18next.t("provider:Host"), i18next.t("provider:Host - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("host", e.target.value);
+ }} />
+
+
+
+
+ {Setting.getLabel(i18next.t("provider:Port"), i18next.t("provider:Port - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("port", e.target.value);
+ }} />
+
+
+
+
+ {Setting.getLabel(i18next.t("general:User"), i18next.t("general:User - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("user", e.target.value);
+ }} />
+
+
+
+
+ {Setting.getLabel(i18next.t("general:Password"), i18next.t("general:Password - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("password", e.target.value);
+ }} />
+
+
+
+ )
+ }
+
+ );
+ }
+
renderAdapter() {
return (
-