diff --git a/object/adapter.go b/object/adapter.go
index 1fb3e691..e5090724 100644
--- a/object/adapter.go
+++ b/object/adapter.go
@@ -30,16 +30,15 @@ type Adapter struct {
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
- UseSameDb bool `json:"useSameDb"`
- Type string `xorm:"varchar(100)" json:"type"`
- DatabaseType string `xorm:"varchar(100)" json:"databaseType"`
- 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"`
- Database string `xorm:"varchar(100)" json:"database"`
- Table string `xorm:"varchar(100)" json:"table"`
- TableNamePrefix string `xorm:"varchar(100)" json:"tableNamePrefix"`
+ Table string `xorm:"varchar(100)" json:"table"`
+ UseSameDb bool `json:"useSameDb"`
+ Type string `xorm:"varchar(100)" json:"type"`
+ DatabaseType string `xorm:"varchar(100)" json:"databaseType"`
+ 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"`
+ Database string `xorm:"varchar(100)" json:"database"`
*xormadapter.Adapter `xorm:"-" json:"-"`
}
@@ -140,63 +139,69 @@ 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 (adapter *Adapter) InitAdapter() error {
- if adapter.Adapter == nil {
- var dataSourceName string
+ if adapter.Adapter != nil {
+ return nil
+ }
- if adapter.UseSameDb || adapter.isBuiltIn() {
- dataSourceName = conf.GetConfigString("dataSourceName")
- if adapter.DatabaseType == "mysql" {
- dataSourceName = dataSourceName + adapter.Database
- }
- } else {
- switch adapter.DatabaseType {
- case "mssql":
- dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", adapter.User,
- adapter.Password, adapter.Host, adapter.Port, adapter.Database)
- case "mysql":
- dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", adapter.User,
- adapter.Password, adapter.Host, adapter.Port, adapter.Database)
- case "postgres":
- dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%d 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=%d 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.Host)
- default:
- return fmt.Errorf("unsupported database type: %s", adapter.DatabaseType)
- }
+ var driverName string
+ var dataSourceName string
+ if adapter.UseSameDb || adapter.isBuiltIn() {
+ driverName = conf.GetConfigString("driverName")
+ dataSourceName = conf.GetConfigString("dataSourceName")
+ if conf.GetConfigString("driverName") == "mysql" {
+ dataSourceName = dataSourceName + conf.GetConfigString("dbName")
}
-
- if !isCloudIntranet {
- dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
- }
-
- var err error
- engine, err := xorm.NewEngine(adapter.DatabaseType, dataSourceName)
-
- if (adapter.UseSameDb || adapter.isBuiltIn()) && adapter.DatabaseType == "postgres" {
- schema := util.GetValueFromDataSourceName("search_path", dataSourceName)
- if schema != "" {
- engine.SetSchema(schema)
- }
- }
-
- adapter.Adapter, err = xormadapter.NewAdapterByEngineWithTableName(engine, adapter.getTable(), adapter.TableNamePrefix)
- if err != nil {
- return err
+ } else {
+ driverName = adapter.DatabaseType
+ switch driverName {
+ case "mssql":
+ dataSourceName = fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", adapter.User,
+ adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ case "mysql":
+ dataSourceName = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", adapter.User,
+ adapter.Password, adapter.Host, adapter.Port, adapter.Database)
+ case "postgres":
+ dataSourceName = fmt.Sprintf("user=%s password=%s host=%s port=%d 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=%d 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.Host)
+ default:
+ return fmt.Errorf("unsupported database type: %s", adapter.DatabaseType)
}
}
+
+ if !isCloudIntranet {
+ dataSourceName = strings.ReplaceAll(dataSourceName, "dbi.", "db.")
+ }
+
+ engine, err := xorm.NewEngine(driverName, dataSourceName)
+ if err != nil {
+ return err
+ }
+
+ if (adapter.UseSameDb || adapter.isBuiltIn()) && driverName == "postgres" {
+ schema := util.GetValueFromDataSourceName("search_path", dataSourceName)
+ if schema != "" {
+ engine.SetSchema(schema)
+ }
+ }
+
+ var tableName string
+ if driverName == "mssql" {
+ tableName = fmt.Sprintf("[%s]", adapter.Table)
+ } else {
+ tableName = adapter.Table
+ }
+
+ adapter.Adapter, err = xormadapter.NewAdapterByEngineWithTableName(engine, tableName, "")
+ if err != nil {
+ return err
+ }
+
return nil
}
diff --git a/object/init.go b/object/init.go
index 00acd7e8..028beafc 100644
--- a/object/init.go
+++ b/object/init.go
@@ -426,8 +426,8 @@ func initBuiltInUserAdapter() {
Owner: "built-in",
Name: "user-adapter-built-in",
CreatedTime: util.GetCurrentTime(),
- UseSameDb: true,
Table: "casbin_user_rule",
+ UseSameDb: true,
}
_, err = AddAdapter(adapter)
if err != nil {
@@ -449,8 +449,8 @@ func initBuiltInApiAdapter() {
Owner: "built-in",
Name: "api-adapter-built-in",
CreatedTime: util.GetCurrentTime(),
- UseSameDb: true,
Table: "casbin_api_rule",
+ UseSameDb: true,
}
_, err = AddAdapter(adapter)
if err != nil {
diff --git a/web/src/AdapterEditPage.js b/web/src/AdapterEditPage.js
index 47e688b8..29b3680d 100644
--- a/web/src/AdapterEditPage.js
+++ b/web/src/AdapterEditPage.js
@@ -115,6 +115,17 @@ class AdapterEditPage extends React.Component {
}} />
+
+
+ {Setting.getLabel(i18next.t("syncer:Table"), i18next.t("syncer:Table - Tooltip"))} :
+
+
+ {
+ this.updateAdapterField("table", e.target.value);
+ }} />
+
+
{Setting.getLabel(i18next.t("adapter:Use same DB"), i18next.t("adapter:Use same DB - Tooltip"))} :
@@ -122,6 +133,23 @@ class AdapterEditPage extends React.Component {
{
this.updateAdapterField("useSameDb", checked);
+ if (checked) {
+ this.updateAdapterField("type", "");
+ this.updateAdapterField("databaseType", "");
+ this.updateAdapterField("host", "");
+ this.updateAdapterField("port", 0);
+ this.updateAdapterField("user", "");
+ this.updateAdapterField("password", "");
+ this.updateAdapterField("database", "");
+ } else {
+ this.updateAdapterField("type", "Database");
+ this.updateAdapterField("databaseType", "mysql");
+ this.updateAdapterField("host", "localhost");
+ this.updateAdapterField("port", 3306);
+ this.updateAdapterField("user", "root");
+ this.updateAdapterField("password", "123456");
+ this.updateAdapterField("database", "dbName");
+ }
}} />
@@ -219,17 +247,6 @@ class AdapterEditPage extends React.Component {
)
}
-
-
- {Setting.getLabel(i18next.t("syncer:Table"), i18next.t("syncer:Table - Tooltip"))} :
-
-
- {
- this.updateAdapterField("table", e.target.value);
- }} />
-
-
{Setting.getLabel(i18next.t("provider:DB test"), i18next.t("provider:DB test - Tooltip"))} :
diff --git a/web/src/AdapterListPage.js b/web/src/AdapterListPage.js
index c8a74c48..f5601517 100644
--- a/web/src/AdapterListPage.js
+++ b/web/src/AdapterListPage.js
@@ -14,7 +14,7 @@
import React from "react";
import {Link} from "react-router-dom";
-import {Button, Table} from "antd";
+import {Button, Switch, Table} from "antd";
import moment from "moment";
import * as Setting from "./Setting";
import * as AdapterBackend from "./backend/AdapterBackend";
@@ -30,14 +30,8 @@ class AdapterListPage extends BaseListPage {
owner: owner,
name: `adapter_${randomName}`,
createdTime: moment().format(),
- type: "Database",
- host: "localhost",
- port: 3306,
- user: "root",
- password: "123456",
- databaseType: "mysql",
- database: "dbName",
table: "tableName",
+ useSameDb: true,
};
}
@@ -118,6 +112,25 @@ class AdapterListPage extends BaseListPage {
return Setting.getFormattedDate(text);
},
},
+ {
+ title: i18next.t("syncer:Table"),
+ dataIndex: "table",
+ key: "table",
+ width: "120px",
+ sorter: true,
+ },
+ {
+ title: i18next.t("adapter:Use same DB"),
+ dataIndex: "useSameDb",
+ key: "useSameDb",
+ width: "120px",
+ sorter: true,
+ render: (text, record, index) => {
+ return (
+
+ );
+ },
+ },
{
title: i18next.t("provider:Type"),
dataIndex: "type",
@@ -181,13 +194,6 @@ class AdapterListPage extends BaseListPage {
width: "120px",
sorter: true,
},
- {
- title: i18next.t("syncer:Table"),
- dataIndex: "table",
- key: "table",
- width: "120px",
- sorter: true,
- },
{
title: i18next.t("general:Action"),
dataIndex: "",