Skip to main content

User Management

PSS Bids Manager uses an invitation-only user management system. Administrators must explicitly invite users before they can access any service.

info

This guide is for ADMIN users only. Only administrators can manage users and service access.

User Status Lifecycle

Users progress through three status states:

StatusDescriptionCan Login?
PENDING_INVITATIONUser invited but hasn't accepted❌ No
ACTIVEUser accepted invitation✅ Yes
DISABLEDAccess revoked (soft delete)❌ No

Service-Specific Access

Users are granted access to specific services, not blanket platform access:

ServiceDescriptionTypical Roles
BIDSBid estimation and managementADMIN, ESTIMATOR, PM
PROJECTSPurchase orders and cost trackingADMIN, PM, OPS, ACCOUNTING
FIELDTimesheets and GPS trackingADMIN, FOREMAN
warning

Service access is explicit. Being invited to BIDS does not automatically grant access to PROJECTS or FIELD.

Role System

Base Role

Every user has a base role that applies by default across all services.

Per-Service Override

Optionally, a user can have a different role for specific services.

Example:

User: John Smith
Base Role: ESTIMATOR
Service Access:
- BIDS: (uses base role → ESTIMATOR)
- PROJECTS: PM (override)
- FIELD: (no access)

Available Roles

RoleDescriptionCommon Services
ADMINFull system access, manage users/settingsAll
ESTIMATORCreate and edit bids, full estimationBIDS
PMProject management, approve POsBIDS, PROJECTS
OPSOperations, manage projectsPROJECTS
ACCOUNTINGReview and approve POsPROJECTS
FOREMANClock crews in/out, manage timesheetsFIELD

Inviting Users

1
Navigate to Users Page

Go to Admin Panel → Personnel → Users

2
Click Invite User

Click the "Invite User" button in the top-right corner

3
Fill Invitation Form

Enter user details:

FieldDescription
EmailUser's email address
NameFull name
Base RoleDefault role for all services
Service AccessSelect which services to grant
Service OverridesOptionally set different roles per service
4
Send Invitation

Click "Send Invitation". System creates the user with status PENDING_INVITATION and generates an invitation link.

5
Share Invitation Link

Copy the invitation link and send to the user via email or messaging.

note

Invitation links expire after 7 days and are one-time use.

https://forge.precisionsiteservices.com/invite?token=abc123...

User Accepts Invitation

When the invited user clicks the link:

  1. Redirected to Portal with invitation details
  2. Clicks "Accept Invitation"
  3. Signs in with Google OAuth (email must match invitation)
  4. System verifies token and activates user
  5. User redirected to first available service (typically BIDS)

Managing Existing Users

Users Table

The Users page displays all system users with:

  • Name and email
  • Status badge (PENDING, ACTIVE, DISABLED)
  • Base role
  • Service access summary
  • Last login timestamp
  • Action buttons
FilterDescription
SearchFilter by name or email
StatusPENDING / ACTIVE / DISABLED
RoleFilter by base role
ServiceShow only users with access to specific service

User Actions

Click Edit icon to modify:

  • Name
  • Base role
warning

You cannot change a user's email address. Create a new invitation if needed.

Resend Invitation

For users with PENDING_INVITATION status:

  1. Find the user in the table
  2. Click Actions → Resend Invitation
  3. New invitation link generated (old token revoked)
  4. Share the new link with the user

Self-Service Profile

All users can manage their own profile:

  1. Click user menu dropdown → Profile
  2. View profile information
  3. Edit own name
  4. View service access (read-only)
  5. View recent activity log
note

Users cannot change their own role, email, or request additional service access. They must contact an administrator.

Bulk Operations

Select multiple users using checkboxes to:

  • Bulk Enable - Re-activate disabled users
  • Bulk Disable - Prevent login for multiple users
  • Bulk Delete - Remove multiple users (with bid handling options)
  • Export to CSV - Download user list

API Endpoints

Admin Endpoints

All require ADMIN role:

MethodEndpointDescription
GET/api/admin/usersList all users
GET/api/admin/users/:idGet single user
POST/api/admin/users/inviteInvite new user
PATCH/api/admin/users/:idUpdate user
PATCH/api/admin/users/:id/statusEnable/disable user
DELETE/api/admin/users/:idDelete user
POST/api/admin/users/:id/resend-inviteResend invitation
PUT/api/admin/users/:id/services/:serviceGrant/update service access
DELETE/api/admin/users/:id/services/:serviceRevoke service access
GET/api/admin/users/exportExport users to CSV

Self-Service Endpoints

All authenticated users:

MethodEndpointDescription
GET/api/users/meGet own profile
PATCH/api/users/meUpdate own name
GET/api/users/me/activityGet own audit log

Security

Invitation Tokens
  • 32-character alphanumeric tokens
  • Expire after 7 days
  • One-time use (cleared after acceptance)
  • Can be revoked by admin
  • Email must match when accepting
Authorization
  • SuperTokens sessions contain role and services claims in session data
  • Each service validates access on protected routes
  • ADMIN role bypasses service checks
  • Disabled users' sessions are invalidated immediately
Audit Logging

All user management actions are logged:

  • User invited, invitation accepted
  • User updated, disabled, enabled, deleted
  • Service access granted, revoked

Best Practices

🛡️

Principle of Least Privilege

Grant only the minimum service access and role needed for each user's job function.

📅

Regular Access Review

Periodically review user access and disable accounts for users who no longer need access.

🕐

Invitation Expiry

Resend invitations if they expire. Don't share expired links.

📚

Service Segregation

Use per-service role overrides to give users different permissions in different services.

Migration from Auto-Registration

When the invitation system was deployed:

  1. All existing users were set to ACTIVE status
  2. All existing users were granted BIDS service access with their current role
  3. New users can no longer auto-register
  4. Domain whitelist still applies to invitations (@precisionsiteservices.com)

Troubleshooting

User sees "No invitation found" error

The user is trying to login but hasn't been invited yet. Create an invitation for them.

User sees "Check email for invitation" error

User status is PENDING_INVITATION. They need to click the invitation link to accept.

User sees "Account disabled" error

User status is DISABLED. Re-enable the account via Admin Panel → Users.

Invitation link expired

Links expire after 7 days. Use "Resend Invitation" to generate a new link.

Next Steps