|
@@ -10,50 +10,12 @@ import (
|
|
|
"gopkg.in/yaml.v3"
|
|
"gopkg.in/yaml.v3"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-var dataLoaderInstance *DataLoader
|
|
|
|
|
|
|
+var dataLoaderInstance = &DataLoader{}
|
|
|
|
|
|
|
|
func GetDataLoader() *DataLoader {
|
|
func GetDataLoader() *DataLoader {
|
|
|
return dataLoaderInstance
|
|
return dataLoaderInstance
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func Init() {
|
|
|
|
|
- dataDir := os.Getenv("DATA_LOADER_DATA_DIR")
|
|
|
|
|
- if strutils.IsStringEmpty(dataDir) {
|
|
|
|
|
- panic("DATA_LOADER_DATA_DIR环境变量未设置")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- dataDirAbs, err := filepath.Abs(dataDir)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- panic(err)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if !fileutils.PathExists(dataDirAbs) {
|
|
|
|
|
- panic("数据目录不存在")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- tenantsDataFilePath := filepath.Join(dataDirAbs, "tenants.yaml")
|
|
|
|
|
- if !fileutils.PathExists(tenantsDataFilePath) {
|
|
|
|
|
- panic("租户数据不存在")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- usersDataFilePath := filepath.Join(dataDirAbs, "users.yaml")
|
|
|
|
|
- if !fileutils.PathExists(usersDataFilePath) {
|
|
|
|
|
- panic("用户数据不存在")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- rolesDataFilePath := filepath.Join(dataDirAbs, "roles.yaml")
|
|
|
|
|
- if !fileutils.PathExists(rolesDataFilePath) {
|
|
|
|
|
- panic("角色数据不存在")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- d, err := LoadData(tenantsDataFilePath, usersDataFilePath, rolesDataFilePath)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- panic(err)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- dataLoaderInstance = d
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
type Tenant struct {
|
|
type Tenant struct {
|
|
|
ID string `yaml:"id"`
|
|
ID string `yaml:"id"`
|
|
|
Name string `yaml:"name"`
|
|
Name string `yaml:"name"`
|
|
@@ -84,43 +46,12 @@ type DataLoader struct {
|
|
|
Roles []Role `yaml:"roles"`
|
|
Roles []Role `yaml:"roles"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func LoadData(tenantsDataFilePath string, usersDataFilePath string, rolesDataFilePath string) (*DataLoader, error) {
|
|
|
|
|
- dataLoader := new(DataLoader)
|
|
|
|
|
-
|
|
|
|
|
- tenantsData, err := os.ReadFile(tenantsDataFilePath)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- err = yaml.Unmarshal(tenantsData, &dataLoader.Tenants)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- usersData, err := os.ReadFile(usersDataFilePath)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- err = yaml.Unmarshal(usersData, &dataLoader.Users)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- rolesData, err := os.ReadFile(rolesDataFilePath)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- err = yaml.Unmarshal(rolesData, &dataLoader.Roles)
|
|
|
|
|
|
|
+func (d *DataLoader) GetUserByUserNameAndPassword(userName string, password string) (User, error) {
|
|
|
|
|
+ err := d.loadData()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return nil, err
|
|
|
|
|
|
|
+ return User{}, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return dataLoader, nil
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (d *DataLoader) GetUserByUserNameAndPassword(userName string, password string) (User, error) {
|
|
|
|
|
for _, user := range d.Users {
|
|
for _, user := range d.Users {
|
|
|
if user.UserName == userName && user.Password == password {
|
|
if user.UserName == userName && user.Password == password {
|
|
|
return user, nil
|
|
return user, nil
|
|
@@ -131,6 +62,11 @@ func (d *DataLoader) GetUserByUserNameAndPassword(userName string, password stri
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (d *DataLoader) GetUserByID(userID string) (User, error) {
|
|
func (d *DataLoader) GetUserByID(userID string) (User, error) {
|
|
|
|
|
+ err := d.loadData()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return User{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
for _, user := range d.Users {
|
|
for _, user := range d.Users {
|
|
|
if user.ID == userID {
|
|
if user.ID == userID {
|
|
|
return user, nil
|
|
return user, nil
|
|
@@ -141,6 +77,11 @@ func (d *DataLoader) GetUserByID(userID string) (User, error) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (d *DataLoader) GetTenantByID(tenantID string) (Tenant, error) {
|
|
func (d *DataLoader) GetTenantByID(tenantID string) (Tenant, error) {
|
|
|
|
|
+ err := d.loadData()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return Tenant{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
for _, tenant := range d.Tenants {
|
|
for _, tenant := range d.Tenants {
|
|
|
if tenant.ID == tenantID {
|
|
if tenant.ID == tenantID {
|
|
|
return tenant, nil
|
|
return tenant, nil
|
|
@@ -151,6 +92,11 @@ func (d *DataLoader) GetTenantByID(tenantID string) (Tenant, error) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (d *DataLoader) GetRolesByIDs(roleIDs []string) ([]Role, error) {
|
|
func (d *DataLoader) GetRolesByIDs(roleIDs []string) ([]Role, error) {
|
|
|
|
|
+ err := d.loadData()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
roles := make([]Role, 0)
|
|
roles := make([]Role, 0)
|
|
|
|
|
|
|
|
if roleIDs == nil || len(roleIDs) == 0 {
|
|
if roleIDs == nil || len(roleIDs) == 0 {
|
|
@@ -167,3 +113,66 @@ func (d *DataLoader) GetRolesByIDs(roleIDs []string) ([]Role, error) {
|
|
|
|
|
|
|
|
return roles, nil
|
|
return roles, nil
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataLoader) loadData() error {
|
|
|
|
|
+ dataDir := os.Getenv("DATA_LOADER_DATA_DIR")
|
|
|
|
|
+ if strutils.IsStringEmpty(dataDir) {
|
|
|
|
|
+ panic("DATA_LOADER_DATA_DIR环境变量未设置")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ dataDirAbs, err := filepath.Abs(dataDir)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ panic(err)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if !fileutils.PathExists(dataDirAbs) {
|
|
|
|
|
+ panic("数据目录不存在")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ tenantsDataFilePath := filepath.Join(dataDirAbs, "tenants.yaml")
|
|
|
|
|
+ if !fileutils.PathExists(tenantsDataFilePath) {
|
|
|
|
|
+ panic("租户数据不存在")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ usersDataFilePath := filepath.Join(dataDirAbs, "users.yaml")
|
|
|
|
|
+ if !fileutils.PathExists(usersDataFilePath) {
|
|
|
|
|
+ panic("用户数据不存在")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ rolesDataFilePath := filepath.Join(dataDirAbs, "roles.yaml")
|
|
|
|
|
+ if !fileutils.PathExists(rolesDataFilePath) {
|
|
|
|
|
+ panic("角色数据不存在")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ tenantsData, err := os.ReadFile(tenantsDataFilePath)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ err = yaml.Unmarshal(tenantsData, &d.Tenants)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ usersData, err := os.ReadFile(usersDataFilePath)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ err = yaml.Unmarshal(usersData, &d.Users)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ rolesData, err := os.ReadFile(rolesDataFilePath)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ err = yaml.Unmarshal(rolesData, &d.Roles)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return nil
|
|
|
|
|
+}
|