Skip to main content

Membership Management Reference

Request workflows

  • frontend/src/pages/ClubSettings/MembershipTab/RequestedUsers.js:109 accepts join requests via POST /c/prbd/reqaccept/:cid/:uid.
  • Request cancellation uses POST /c/prbd/reqcanc/:cid (frontend/src/pages/ClubSettings/MembershipTab/RequestedUsers.js:77).
  • Lists are paged with GET /c/prbd/reqlist/:cid?skip={n} at lines 140 and 178 of the same file.

Invite tracking

  • frontend/src/pages/ClubSettings/MembershipTab/index.js:133 handles direct member invites by calling POST /c/cbmemb/inv/:cid with a list of user IDs.
  • The invite overview reuses GET /c/cbboard/invlist/:cid (see backend/r/cbs.js:208) and filters rows client-side to show pending, accepted or expired states.

Discipline tools

  • Suspension/ban toggles call the respective REST endpoints defined around backend/r/cbs.js:243 (/c/cbmemb/ban/:cid/:uid), :255 (/c/cbmemb/susp/:cid/:uid) and :264 (/c/cbmemb/suspbanrem/:cid/:uid).
  • Lists of banned and suspended members are provided by GET /c/cbmemb/banlist/:cid and GET /c/cbmemb/susplist/:cid, both consumed by the Membership tab to populate moderation drawers.

Permissions

  • Access to each action is gated by RBAC flags delivered alongside the settings payload. The view hides controls when canSee_membership or canSee_clubinvite is false, preventing accidental API calls.
  • Backend middleware checks that presidents or board members making a request still hold the necessary privileges before applying changes.

UX considerations

  • Loading states are tracked per request type so large clubs don�t block the whole page while fetching the next batch.
  • Snackbar feedback confirms every action (approve, decline, revoke) and the table refreshes automatically on success.