Members — SanadiqCloud
Product version: 1.0.0+1 Last updated: 2026-10-07 Audience: Tenant Owners and users with
tenant:user:read(owner bypasses permission checks)
A. Where Members Live
Primary navigation is the side-rail Team tab. The Settings hub also has shortcuts to Members, Invites, and Roles & policies — both entry points open the same screens.
| Screen | Path |
|---|---|
| Team hub | /settings/team |
| Team roadmap | /settings/team/roadmap |
| Members | /settings/members |
| Member detail | /settings/members/detail |
| Invites | /settings/invites |
| Roles | /settings/users-roles |
- Open Team in the side rail, then Members (requires
tenant:user:reador Tenant Owner). - Or open Settings → hub shortcut Members.
- Or go directly to
/settings/members.
B. Members List
The list loads organization members and supports client-side filters (search, role, status).
Columns (desktop table)
| Column | Description |
|---|---|
| Name | Display name (owner badge when applicable) |
| Login email | |
| Role | Role label for the membership |
| Status | Active or Inactive |
| Actions | View, assign role, remove (when permitted) |
Filters
| Filter | Description |
|---|---|
| Search | Name, email, role, or user id |
| Role | Narrow by role |
| Status | All / Active / Inactive |
Pending invitees are tracked on Invites, not as a member status. There is no separate “Pending member” row on this list.
Invite User
If you have tenant:user:create (or are owner), Invite User opens the Invites page. New people join only through invitations — there is no “create member” dialog on the list.
C. Member Detail
Open a row to view:
| Area | Contents |
|---|---|
| Hero | Name, email, Owner badge (when user_id matches tenant.owner_id) or role badge, Active status |
| Membership | Role (non-owners), Active switch when permitted (disabled for the owner row) |
| Dates | Joined / updated timestamps |
| Technical details | Collapsed: membership id, user id, added-by / updated-by ids |
| Danger zone | Remove (non-owners only; owner-only action, see Permissions) |
Assign role opens the full Assign roles page (/settings/users-roles/assign), not a small dialog.
Terminology
| Term | Meaning |
|---|---|
| User | Auth identity (users) |
| Membership | tenant_users row (user ↔ organization) |
| Owner | Canonical ownership via tenants.owner_id (+ Owner business role) |
| Administrator | Built-in access role — not the same as Owner |
There is no separate “Tenant Entry Account” entity.
Owner protection
The organization owner row is protected: no assign/remove/deactivate actions, and the server rejects them. A message explains that ownership and this membership cannot be modified or removed here.
D. Deactivating and Removing a Member
Deactivate / reactivate
- Open member detail and turn the Active switch off or on.
- A deactivated member cannot sign in until reactivated. They cannot reactivate the account themselves.
- Reactivating uses a seat again. If the organization has no free seat the request is refused with HTTP 402
TENANT_SEAT_LIMIT_EXCEEDED(orTENANT_ENTITLEMENT_INACTIVEwhen the subscription is not active).
Remove
- From the list actions or member detail, choose Remove.
- Confirm in the dialog (Remove member? They will lose access to this organization.).
- The membership is ended and the person's SanadiqCloud sign-in account is deactivated, so they can no longer sign in.
Deactivating and removing are never blocked by seat limits — they free the seat.
Members who hold company stock or cash
A member who still holds company stock (stock in their custody pools, or transfers into or out of those pools that are still open) or company cash (custody cash not yet settled, or a cash settlement waiting for review) cannot be deactivated or removed. The request is refused with HTTP 409 TENANT_MEMBER_HOLDS_CUSTODY, saying whether stock, cash or both are held. Unload their stock and settle their cash first — see Custody stock and Cash settlements. If inventory or finance cannot confirm, the request is refused with HTTP 503 TENANT_CUSTODY_CHECK_UNAVAILABLE; try again shortly.
Seats
A seat is one active member; the owner counts like any other member. Pending invitations also reserve a seat. Inactive and removed members do not count. Seat limits come from your subscription in Billing.
E. Role Changes
- From list Assign role / detail Assign role, open Assign roles.
- Select roles from the catalog (owner users and owner-type roles are excluded from assignable sets as implemented).
- Submit — success returns to the previous screen and refreshes when the page uses
pop(true).
Effective access is the union of assigned role permissions. Changes apply on subsequent authorized requests; the user does not need a special “re-login for roles” step in the UI.
F. Permissions
| Action | Permission |
|---|---|
| View members / detail | tenant:user:read (or owner) |
| Invite (navigate to Invites) | tenant:user:create (or owner) |
| Assign role | tenant:user:update + role:assign as gated in UI |
| Toggle active (deactivate / reactivate) | Organization owner only (with tenant:user:update) |
| Remove | Organization owner only (with tenant:user:delete) |
The app may show Remove or the Active switch to members whose role includes tenant:user:update / tenant:user:delete, but the server accepts these actions only from the organization owner.
Related: Invites | Settings overview | Roles overview | Assigning roles