Skip to content

User role select only allows single role despite multi-select UI #312

Description

@jamestang2

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

  1. Go to admin panel → Users → Edit an existing user
  2. Click on Role field, select Role A
  3. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions