Describe the bug
The role selector in the Edit/Add User page (src/pages/manage/users/AddOrEdit.tsx) renders a multi-select UI (tags with close buttons, checkbox indicators per option), but the underlying onClick handler for each SelectOption always replaces the entire role array with only the clicked role, instead of appending to it.
Where
src/pages/manage/users/AddOrEdit.tsx, inside the role Select component:
<SelectOption
value={role.id}
onClick={() => {
// 单选逻辑:如果已选中则移除,否则替换为当前选择
const newRoles = user.role.includes(role.id)
? user.role.filter((id) => id !== role.id)
: [role.id] // 只保留当前选择的角色
setUser("role", newRoles)
}}
>
The comment explicitly says "single-select logic" — this appears to be leftover single-select behavior that was never updated when the backend added multi-role support (PR #9215 in AlistGo/alist).
Expected behavior
Clicking an unselected role should add it to the existing user.role array (multi-select), matching the UI (tags, close buttons) that's already built for it:
onClick={() => {
const newRoles = user.role.includes(role.id)
? user.role.filter((id) => id !== role.id)
: [...user.role, role.id]
setUser("role", newRoles)
}}
Steps to reproduce
- Go to admin panel → Users → Edit an existing user
- Click on Role field, select Role A
- Click Role B — Role A is silently removed and only Role B remains selected
Environment
- Alist backend version: v3.64.0
- Backend confirmed to support multi-role per user (see alist-org/alist PR #9215)
- Bug is frontend-only (alist-web)
Happy to submit a PR with the fix above if maintainers confirm this is the intended multi-select behavior.
Describe the bug
The role selector in the Edit/Add User page (
src/pages/manage/users/AddOrEdit.tsx) renders a multi-select UI (tags with close buttons, checkbox indicators per option), but the underlyingonClickhandler for eachSelectOptionalways replaces the entirerolearray with only the clicked role, instead of appending to it.Where
src/pages/manage/users/AddOrEdit.tsx, inside the roleSelectcomponent:The comment explicitly says "single-select logic" — this appears to be leftover single-select behavior that was never updated when the backend added multi-role support (PR #9215 in AlistGo/alist).
Expected behavior
Clicking an unselected role should add it to the existing
user.rolearray (multi-select), matching the UI (tags, close buttons) that's already built for it:Steps to reproduce
Environment
Happy to submit a PR with the fix above if maintainers confirm this is the intended multi-select behavior.