Administration

Staff Accounts & Roles

NodeDR POS has two roles: admin and cashier. Admins control everything; cashiers run the register.

Roles

Admin

The first account created during onboarding is always an admin. Admins can:

  • Access all POS, Inventory, Sales, and Customer features.
  • Manage Settings (shop config, tax, loyalty, receipt layout, reference data).
  • Create, edit, enable, and disable staff accounts.
  • Export sales data to CSV.
  • Import reference data CSVs (HSN/SAC, PIN codes, IFSC).
  • Access all API routes.

Cashier

Cashier accounts are created by admins. Cashiers can:

  • Use the POS register — add items, checkout, print receipts.
  • View and search Inventory (read-only; cannot add, edit, or delete products).
  • View Sales history and reprint receipts.
  • View the Customer directory and record due payments.
  • Change their own password.

Cashiers cannot: access Settings, manage other staff accounts, export data, or import reference data.

Creating a staff account

  1. Log in as admin.
  2. Go to Settings → Staff.
  3. Click Add staff member.
  4. Enter the name, email, and initial password.
  5. Select role: Cashier (or Admin if you want to grant full access).
  6. Save. The staff member can now log in at http://<machine>:1994/login.

Disabling an account

In Settings → Staff, toggle the Active switch off for a staff member. Disabling an account immediately invalidates their session — they are logged out on the next request. The last active admin account cannot be disabled (you would be locked out).

Password management

  • Passwords are hashed with bcrypt (cost factor 12). Plaintext is never stored.
  • Any user can change their own password from the account menu.
  • Admins can reset a staff member’s password from Settings → Staff → Edit.
  • Login is rate-limited to 10 attempts per 15 minutes per IP to prevent brute force.
  • Login returns an identical error message for unknown email vs. wrong password — no user enumeration.

Session management

Sessions use HttpOnly, SameSite=Lax JWT cookies signed with a secret auto-generated on first boot. Every authenticated request re-checks that the account exists and is active in the database — disabling a staff member logs them out immediately on their next action, not just on next login.

Set COOKIE_SECURE=true in the backend environment when serving over HTTPS (e.g. if you put a reverse proxy in front).

Multiple admins

You can have multiple admin accounts. NodeDR POS prevents the last active admin from being demoted to cashier or disabled — this guard ensures you can never be locked out of your own system.