mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 13:47:15 +08:00
feat: 优化数据库删除
This commit is contained in:
@@ -78,7 +78,12 @@ func (r databaseRepo) Create(req *request.DatabaseCreate) error {
|
||||
return err
|
||||
}
|
||||
if req.CreateUser {
|
||||
if err = mysql.UserCreate(req.Username, req.Password, req.Host); err != nil {
|
||||
if err = NewDatabaseUserRepo().Create(&request.DatabaseUserCreate{
|
||||
ServerID: req.ServerID,
|
||||
Username: req.Username,
|
||||
Password: req.Password,
|
||||
Host: req.Host,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -96,7 +101,12 @@ func (r databaseRepo) Create(req *request.DatabaseCreate) error {
|
||||
return err
|
||||
}
|
||||
if req.CreateUser {
|
||||
if err = postgres.UserCreate(req.Username, req.Password); err != nil {
|
||||
if err = NewDatabaseUserRepo().Create(&request.DatabaseUserCreate{
|
||||
ServerID: req.ServerID,
|
||||
Username: req.Username,
|
||||
Password: req.Password,
|
||||
Host: req.Host,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ func (r databaseUserRepo) Create(req *request.DatabaseUserCreate) error {
|
||||
return err
|
||||
}
|
||||
|
||||
user := new(biz.DatabaseUser)
|
||||
switch server.Type {
|
||||
case biz.DatabaseTypeMysql:
|
||||
mysql, err := db.NewMySQL(server.Username, server.Password, fmt.Sprintf("%s:%d", server.Host, server.Port))
|
||||
@@ -70,6 +71,11 @@ func (r databaseUserRepo) Create(req *request.DatabaseUserCreate) error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
user = &biz.DatabaseUser{
|
||||
ServerID: req.ServerID,
|
||||
Username: req.Username,
|
||||
Host: req.Host,
|
||||
}
|
||||
case biz.DatabaseTypePostgresql:
|
||||
postgres, err := db.NewPostgres(server.Username, server.Password, server.Host, server.Port)
|
||||
if err != nil {
|
||||
@@ -83,12 +89,10 @@ func (r databaseUserRepo) Create(req *request.DatabaseUserCreate) error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
user := &biz.DatabaseUser{
|
||||
ServerID: req.ServerID,
|
||||
Username: req.Username,
|
||||
Host: req.Host,
|
||||
user = &biz.DatabaseUser{
|
||||
ServerID: req.ServerID,
|
||||
Username: req.Username,
|
||||
}
|
||||
}
|
||||
|
||||
if err = app.Orm.FirstOrInit(user, user).Error; err != nil {
|
||||
@@ -191,6 +195,46 @@ func (r databaseUserRepo) Delete(id uint) error {
|
||||
return app.Orm.Where("id = ?", id).Delete(&biz.DatabaseUser{}).Error
|
||||
}
|
||||
|
||||
func (r databaseUserRepo) DeleteByNames(serverID uint, names []string) error {
|
||||
server, err := NewDatabaseServerRepo().Get(serverID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch server.Type {
|
||||
case biz.DatabaseTypeMysql:
|
||||
mysql, err := db.NewMySQL(server.Username, server.Password, fmt.Sprintf("%s:%d", server.Host, server.Port))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
users := make([]*biz.DatabaseUser, 0)
|
||||
if err = app.Orm.Where("server_id = ? AND username IN ?", serverID, names).Find(&users).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
for name := range slices.Values(names) {
|
||||
host := "localhost"
|
||||
for u := range slices.Values(users) {
|
||||
if u.Username == name {
|
||||
host = u.Host
|
||||
break
|
||||
}
|
||||
}
|
||||
_ = mysql.UserDrop(name, host)
|
||||
}
|
||||
case biz.DatabaseTypePostgresql:
|
||||
postgres, err := db.NewPostgres(server.Username, server.Password, server.Host, server.Port)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for name := range slices.Values(names) {
|
||||
_ = postgres.UserDrop(name)
|
||||
}
|
||||
}
|
||||
|
||||
return app.Orm.Where("server_id = ? AND username IN ?", serverID, names).Delete(&biz.DatabaseUser{}).Error
|
||||
}
|
||||
|
||||
// DeleteByServerID 删除指定服务器的所有用户,只是删除面板记录,不会实际删除
|
||||
func (r databaseUserRepo) DeleteByServerID(serverID uint) error {
|
||||
return app.Orm.Where("server_id = ?", serverID).Delete(&biz.DatabaseUser{}).Error
|
||||
}
|
||||
@@ -225,6 +269,6 @@ func (r databaseUserRepo) fillUser(user *biz.DatabaseUser) {
|
||||
}
|
||||
// 初始化,防止 nil
|
||||
if user.Privileges == nil {
|
||||
user.Privileges = make(map[string][]string)
|
||||
user.Privileges = make([]string, 0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"github.com/TheTNB/panel/internal/http/request"
|
||||
"github.com/TheTNB/panel/pkg/acme"
|
||||
"github.com/TheTNB/panel/pkg/cert"
|
||||
"github.com/TheTNB/panel/pkg/db"
|
||||
"github.com/TheTNB/panel/pkg/io"
|
||||
"github.com/TheTNB/panel/pkg/nginx"
|
||||
"github.com/TheTNB/panel/pkg/punycode"
|
||||
@@ -507,17 +506,14 @@ func (r *websiteRepo) Delete(req *request.WebsiteDelete) error {
|
||||
_ = io.Remove(website.Path)
|
||||
}
|
||||
if req.DB {
|
||||
rootPassword, err := NewSettingRepo().Get(biz.SettingKeyMySQLRootPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
repo := NewDatabaseServerRepo()
|
||||
if mysql, err := repo.GetByName("local_mysql"); err == nil {
|
||||
_ = NewDatabaseUserRepo().DeleteByNames(mysql.ID, []string{website.Name})
|
||||
_ = NewDatabaseRepo().Delete(mysql.ID, website.Name)
|
||||
}
|
||||
if mysql, err := db.NewMySQL("root", rootPassword, "/tmp/mysql.sock", "unix"); err == nil {
|
||||
_ = mysql.UserDrop(website.Name, "localhost")
|
||||
_ = mysql.DatabaseDrop(website.Name)
|
||||
}
|
||||
if postgres, err := db.NewPostgres("postgres", "", "127.0.0.1", 5432); err == nil {
|
||||
_ = postgres.UserDrop(website.Name)
|
||||
_ = postgres.DatabaseDrop(website.Name)
|
||||
if postgres, err := repo.GetByName("local_postgresql"); err == nil {
|
||||
_ = NewDatabaseUserRepo().DeleteByNames(postgres.ID, []string{website.Name})
|
||||
_ = NewDatabaseRepo().Delete(postgres.ID, website.Name)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user