From ddf718223428dd0cefa989365abd9ba2e4ddc608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Tue, 21 Mar 2023 21:42:01 +0800 Subject: [PATCH] fix messages --- backend/global/user.go | 124 +++++++++++++++--- backend/message.go | 15 +-- frontend/vben/src/api/sys/user.ts | 8 +- .../views/dashboard/account/account.data.ts | 4 +- .../workbench/components/DynamicInfo.vue | 1 + 5 files changed, 119 insertions(+), 33 deletions(-) diff --git a/backend/global/user.go b/backend/global/user.go index 86e0486..c3b0f65 100644 --- a/backend/global/user.go +++ b/backend/global/user.go @@ -153,15 +153,12 @@ func (u *UserDatabase) AddUser(user *User, opname string) error { if err != nil { return err } - err = u.notifyUserAdded(opname, user.Name) - if err != nil { - return err - } nu, err := u.GetUserByName(user.Name) if err != nil { return err } - return u.SendMessage(opname+"创建了账号", opname, *nu.ID) + _ = u.notifyUserAdded(opname, user.Name, *nu.ID) + return u.SendMessage(opname+" 创建了您的账号", opname, *nu.ID) } // UpdateUserInfo ... @@ -185,7 +182,10 @@ func (u *UserDatabase) UpdateUserInfo(id int, opname, nick, avtr, desc string) e if err != nil { return err } - return u.SendMessage(opname+"更新了个人信息", opname, *user.ID) + if opname != user.Name { + return u.SendMessage(opname+" 更新了您的个人信息", opname, *user.ID) + } + return u.SendMessage("更新了个人信息", opname, *user.ID) } // UpdateUserRole ... @@ -197,6 +197,9 @@ func (u *UserDatabase) UpdateUserRole(id int, nr UserRole, opname string) error if err != nil { return err } + if opname == user.Name { + return ErrInvalidName + } user.Role = nr u.mu.Lock() err = u.db.Insert(UserTableUser, &user) @@ -204,7 +207,8 @@ func (u *UserDatabase) UpdateUserRole(id int, nr UserRole, opname string) error if err != nil { return err } - return u.SendMessage("您的权限被"+opname+"变更为"+user.Role.Nick(), opname, *user.ID) + _ = u.SendMessage("您的权限被 "+opname+" 变更为 "+user.Role.Nick(), opname, *user.ID) + return u.notifyUpdateUserRole(user.Name, opname, nr, *user.ID) } // DisableUser ... @@ -213,16 +217,19 @@ func (u *UserDatabase) DisableUser(id int, opname string) error { if err != nil { return err } + if opname == user.Name { + return ErrInvalidName + } user.Last = time.Now().Unix() user.Pswd = "" - _ = u.SendMessage("账户被"+opname+"禁用", opname, *user.ID) u.mu.Lock() err = u.db.Insert(UserTableUser, &user) u.mu.Unlock() if err != nil { return err } - return u.SendMessage(user.Name+"的账户被"+opname+"禁用", opname, *user.ID) + _ = u.SendMessage("您的账户被 "+opname+" 禁用", opname, *user.ID) + return u.notifyDisableUser(user.Name, opname, *user.ID) } // UpdateUserPassword ... @@ -236,14 +243,17 @@ func (u *UserDatabase) UpdateUserPassword(id int, opname, npwd string) error { } user.Last = time.Now().Unix() user.Pswd = npwd - _ = u.notifyPasswordChange(user.Name, npwd) u.mu.Lock() err = u.db.Insert(UserTableUser, &user) u.mu.Unlock() if err != nil { return err } - return u.SendMessage(opname+"更新了密码", opname, *user.ID) + _ = u.notifyPasswordChange(user.Name, npwd, opname, *user.ID) + if user.Name != opname { + return u.SendMessage(opname+" 更新了您的密码", opname, *user.ID) + } + return u.SendMessage("更新了密码", opname, *user.ID) } // UpdateUserContact ... @@ -256,14 +266,17 @@ func (u *UserDatabase) UpdateUserContact(id int, opname, ncont string) error { return err } user.Cont = ncont - _ = u.notifyContactChange(user.Name, ncont) u.mu.Lock() err = u.db.Insert(UserTableUser, &user) u.mu.Unlock() if err != nil { return err } - return u.SendMessage(opname+"更新了联系方式", opname, *user.ID) + _ = u.notifyContactChange(user.Name, ncont, *user.ID) + if user.Name != opname { + return u.SendMessage(opname+" 更新了您的联系方式", opname, *user.ID) + } + return u.SendMessage("更新了联系方式", opname, *user.ID) } // GetUserByName avoids sql injection by limiting username to 0-9A-Za-z @@ -413,7 +426,7 @@ func (u *UserDatabase) SendMessage(text, opname string, to int) error { m := Message{ToID: to, Date: time.Now().Unix(), Text: text, Cont: opname, Pswd: "opname"} u.mu.Lock() defer u.mu.Unlock() - return u.db.InsertUnique(UserTableMessage, m) + return u.db.InsertUnique(UserTableMessage, &m) } // NotifyRegister will send register notification to all supers @@ -511,7 +524,7 @@ func (u *UserDatabase) NotifyResetPassword(ip, name, cont string) error { } // notifyUserAdded will send notification to all supers -func (u *UserDatabase) notifyUserAdded(opname, name string) error { +func (u *UserDatabase) notifyUserAdded(opname, name string, nuid int) error { if opname == "" || name == "" { return ErrEmptyName } @@ -523,12 +536,15 @@ func (u *UserDatabase) notifyUserAdded(opname, name string) error { m := Message{ Date: time.Now().Unix(), - Text: opname + "添加了用户 " + name, + Text: opname + " 添加了用户 " + name, Cont: opname, } u.mu.Lock() defer u.mu.Unlock() for _, to := range tos { + if nuid == to { + continue + } m.ToID = to err = u.db.InsertUnique(UserTableMessage, &m) if err != nil { @@ -539,7 +555,7 @@ func (u *UserDatabase) notifyUserAdded(opname, name string) error { } // notifyContactChange will send notification to all supers -func (u *UserDatabase) notifyContactChange(name, cont string) error { +func (u *UserDatabase) notifyContactChange(name, cont string, id int) error { if name == "" { return ErrEmptyName } @@ -561,6 +577,9 @@ func (u *UserDatabase) notifyContactChange(name, cont string) error { u.mu.Lock() defer u.mu.Unlock() for _, to := range tos { + if id == to { + continue + } m.ToID = to err = u.db.InsertUnique(UserTableMessage, &m) if err != nil { @@ -571,7 +590,7 @@ func (u *UserDatabase) notifyContactChange(name, cont string) error { } // notifyPasswordChange will send notification to all supers -func (u *UserDatabase) notifyPasswordChange(name, npwd string) error { +func (u *UserDatabase) notifyPasswordChange(name, npwd, opname string, id int) error { if name == "" { return ErrEmptyName } @@ -583,13 +602,80 @@ func (u *UserDatabase) notifyPasswordChange(name, npwd string) error { m := Message{ Date: time.Now().Unix(), - Text: "用户 " + name + " 更改了密码", + Text: "用户 " + name + " 被 " + opname + " 更改了密码", Name: name, Pswd: npwd, } u.mu.Lock() defer u.mu.Unlock() for _, to := range tos { + if id == to { + continue + } + m.ToID = to + err = u.db.InsertUnique(UserTableMessage, &m) + if err != nil { + return err + } + } + return nil +} + +// notifyPasswordChange will send notification to all supers +func (u *UserDatabase) notifyUpdateUserRole(name, opname string, role UserRole, id int) error { + if name == "" || opname == "" { + return ErrEmptyName + } + + tos, err := u.GetSuperIDs() + if err != nil { + return err + } + + m := Message{ + Date: time.Now().Unix(), + Text: name + " 的权限被 " + opname + " 变更为 " + role.Nick(), + Cont: opname, + Pswd: "opname", + } + u.mu.Lock() + defer u.mu.Unlock() + for _, to := range tos { + if id == to { + continue + } + m.ToID = to + err = u.db.InsertUnique(UserTableMessage, &m) + if err != nil { + return err + } + } + return nil +} + +// notifyPasswordChange will send notification to all supers +func (u *UserDatabase) notifyDisableUser(name, opname string, id int) error { + if name == "" || opname == "" { + return ErrEmptyName + } + + tos, err := u.GetSuperIDs() + if err != nil { + return err + } + + m := Message{ + Date: time.Now().Unix(), + Text: name + " 的账户被 " + opname + " 禁用", + Cont: opname, + Pswd: "opname", + } + u.mu.Lock() + defer u.mu.Unlock() + for _, to := range tos { + if id == to { + continue + } m.ToID = to err = u.db.InsertUnique(UserTableMessage, &m) if err != nil { diff --git a/backend/message.go b/backend/message.go index 2a5a722..142927f 100644 --- a/backend/message.go +++ b/backend/message.go @@ -37,18 +37,17 @@ func getMessageList(token string) ([]messageList, error) { am := make(map[string]string, 64) for i, m := range ms { avtr := "" - if a, ok := am[m.Name]; ok { + n := m.Name + if n == "" { + n = m.Cont + } + if a, ok := am[n]; ok { avtr = a } else { - var u global.User - if m.Name != "" { - u, err = global.UserDB.GetUserByName(m.Name) - } else if m.Cont != "" { - u, err = global.UserDB.GetUserByName(m.Cont) - } + u, err := global.UserDB.GetUserByName(n) if err == nil { avtr = u.Avtr - am[m.Name] = u.Avtr + am[n] = u.Avtr } } ml[i].ID = *m.ID diff --git a/frontend/vben/src/api/sys/user.ts b/frontend/vben/src/api/sys/user.ts index 148352e..e72503e 100644 --- a/frontend/vben/src/api/sys/user.ts +++ b/frontend/vben/src/api/sys/user.ts @@ -30,7 +30,7 @@ enum Api { GetUsersList = '/getUsersList', IsNameExist = '/isNameExist', SetRole = '/setRole', - SetStatus = '/setStatus', + DisableUser = '/disableUser', } /** @@ -166,7 +166,7 @@ export function doLogout() { } export const setRole = (id: number, role: number) => - defHttp.post({ url: Api.SetRole, params: { id, role } }) + defHttp.post({ url: Api.SetRole, params: { id, role } }, { errorMessageMode: 'none' }) -export const setStatus = (id: number, stat: boolean) => - defHttp.post({ url: Api.SetStatus, params: { id, stat } }) +export const disableUser = (id: number, stat: boolean) => + defHttp.post({ url: Api.DisableUser, params: { id, stat } }, { errorMessageMode: 'none' }) diff --git a/frontend/vben/src/views/dashboard/account/account.data.ts b/frontend/vben/src/views/dashboard/account/account.data.ts index d76852e..d7fd41b 100644 --- a/frontend/vben/src/views/dashboard/account/account.data.ts +++ b/frontend/vben/src/views/dashboard/account/account.data.ts @@ -3,7 +3,7 @@ import { FormSchema } from '/@/components/Table' import { h } from 'vue' import { Switch } from 'ant-design-vue' import { useMessage } from '/@/hooks/web/useMessage' -import { setStatus } from '/@/api/sys/user' +import { disableUser } from '/@/api/sys/user' export const columns: BasicColumn[] = [ { @@ -37,7 +37,7 @@ export const columns: BasicColumn[] = [ return } record.pendingStatus = true - setStatus(record.id, checked) + disableUser(record.id, checked) .then(() => { record.stat = checked createMessage.success(`已成功禁用账户并清空密码, 如需重新启用, 请让用户找回密码`) diff --git a/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue b/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue index 9c6b9af..4826f08 100644 --- a/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue +++ b/frontend/vben/src/views/dashboard/workbench/components/DynamicInfo.vue @@ -46,6 +46,7 @@ const { createMessage } = useMessage() getMessageList().then((value) => { if (value) dynamicInfoItemsRef.value = value + else dynamicInfoItemsRef.value = [] }) async function accept(id: number) { try {