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
- Log in as admin.
- Go to Settings → Staff.
- Click Add staff member.
- Enter the name, email, and initial password.
- Select role: Cashier (or Admin if you want to grant full access).
- 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.