修复新增账号安全配置后的状态刷新
Some checks are pending
Security Checks / security (push) Waiting to run

This commit is contained in:
smail 2026-09-26 12:09:15 +08:00
parent 6761ab2091
commit 753509e910
2 changed files with 39 additions and 9 deletions

View File

@ -150,14 +150,17 @@ func CreateUser(ctx *context.Context, w http.ResponseWriter, req *http.Request)
writeAccountGroupError(w, err)
return
}
response.NewSuccessResponse(struct {
models.User
GroupIDs []int
MembershipVersion int
}{user, groupIDs, user.SecurityVersion}).FPrint(w)
response.NewSuccessResponse(userListItem{
ID: user.ID, Account: user.Account, Name: user.Name,
Disabled: user.Disabled, Role: user.EffectiveRole(), IsAdmin: user.IsAdmin,
GroupIDs: groupIDs, MembershipVersion: user.SecurityVersion,
MustChangePassword: user.MustChangePassword,
ExternalEmailEnabled: user.ExternalEmailEnabled == 1,
}).FPrint(w)
}
type userListRequest struct {
UserID int `json:"user_id"`
GroupID *int `json:"group_id"`
CurrentPage int `json:"current_page"`
PageSize int `json:"page_size"`
@ -231,6 +234,9 @@ func UserList(ctx *context.Context, w http.ResponseWriter, req *http.Request) {
query := db.Instance.Table(&models.User{})
defer query.Close()
accountgroup.ApplyScope(query, ctx.UserID, ctx.EffectiveRole())
if reqData.UserID != 0 {
query.And("id = ?", reqData.UserID)
}
if reqData.GroupID != nil {
groups, err := accountgroup.VisibleGroups(db.Instance, ctx.UserID, ctx.EffectiveRole())
if err != nil {

View File

@ -130,10 +130,30 @@ export function usePage() {
const title = ref(lang.editUser)
const reflushList = async function () {
const selectedID = selectedUser.value?.ID
await groups.refreshGroups()
if (selectedUser.value?.ID) {
if (selectedID && selectedUser.value?.ID === selectedID) {
const users = groups.accountGroups.value.flatMap(group => group.rows)
selectedUser.value = users.find(item => item.ID === selectedUser.value.ID) || selectedUser.value
let current = users.find(item => item.ID === selectedID)
if (!current) {
const response = await http.post('/api/v1/user/list', { user_id: selectedID, page_size: 1 })
if (response?.errorNo !== 0) throw new Error(response?.errorMsg || lang.fail)
current = response.data?.list?.find(item => item.ID === selectedID)
}
if (selectedUser.value?.ID !== selectedID) return
if (!current) {
selectedUser.value = null
userInfoDialog.value = false
return
}
const savedGroups = selectedUser.value.GroupIDs || [0]
const currentGroups = current.GroupIDs || [0]
if (current.Role === selectedUser.value.Role
&& currentGroups.length === savedGroups.length
&& savedGroups.every(id => currentGroups.includes(id))) {
editingMembershipVersion.value = current.MembershipVersion
}
selectedUser.value = current
}
}
@ -199,8 +219,12 @@ export function usePage() {
externalEmailDialogVisible.value = true
}
const handleSecurityChanged = function () {
reflushList()
const handleSecurityChanged = async function () {
try {
await reflushList()
} catch (error) {
ElNotification({ title: lang.fail, message: error?.message || lang.fail, type: 'error' })
}
}
const submit = async function () {