Personnel Management
The Personnel module manages department members, their roles, certifications, and access. It is handled by the PersonnelController.
Personnel List
Authorization: Personnel_View policy
The main personnel index displays all department members with:
- Full name and profile information
- Current action status (responding, on-scene, etc.)
- Current staffing level (available, unavailable, etc.)
- Group/station assignment
- Personnel roles
- Admin/disabled/hidden status
Visibility Controls
The personnel list respects the authorization visibility matrix:
- Users only see personnel they have permission to view
- PII (email addresses) visibility is controlled by
CanViewPII()check - Personnel marked as hidden are not shown to non-admin users
Sorting
Personnel can be sorted by the department's configured sort order:
- Default — System default
- First Name — Alphabetical by first name
- Last Name — Alphabetical by last name
- Group — Organized by group/station
Group Tree Filtering
A sidebar tree view allows filtering personnel by group/station.
Adding Personnel
Authorization: Personnel_Create policy + subscription limit check
Prerequisites
- Department must not have reached its subscription plan's personnel limit (
CanUserAddNewUser) - Group administrators can only add users to their own group (when
CanGroupAdminsAddUsersis enabled)
Required Fields
| Field | Required | Description |
|---|---|---|
| First Name | Yes | User's first name |
| Last Name | Yes | User's last name |
| Yes | Must be unique across the system | |
| Username | Yes | Login username |
| Password | Yes | Must meet strength requirements |
Optional Fields
| Field | Description |
|---|---|
| Mobile Number | SMS contact (UK carrier rules apply) |
| Mobile Carrier | Required for text messaging |
| Group | Station/group assignment |
| Roles | Personnel role assignments |
Creation Process
- Validates email uniqueness across the system
- Creates an
IdentityUseraccount - Assigns user to the department
- Sets group membership (if specified)
- Saves user profile
- Assigns personnel roles
- Optionally sends a welcome/creation notification email
- Fires an
AuditEvent
Viewing Personnel
Authorization: Personnel_View policy + CanUserViewUser runtime check
The view shows:
- User profile details
- Group assignment
- All assigned roles
- Department member state (admin, disabled, hidden)
- Last known user state (staffing level)
- Last action log (current status)
Deleting Personnel
Authorization: Personnel_Delete policy + CanUserRemoveUser runtime check
- Group administrators can only remove users from their group (when
CanGroupAdminsRemoveUsersis enabled) - Uses
IDeleteService.DeleteUserAsyncfor proper cleanup
Personnel Roles
Viewing Roles
Authorization: Role_View policy
Lists all personnel roles defined for the department.
Creating Roles
Authorization: Role_Create policy
Create a role with:
- Role name
- Initial member assignments from form selection
Editing Roles
Authorization: Role_Update policy + CanUserEditRole runtime check
Modify role name and member assignments.
Deleting Roles
Authorization: Role_Delete policy + CanUserEditRole runtime check
Remove a role from the department.
Data Endpoints
Personnel Grid Data
| Endpoint | Parameters | Purpose |
|---|---|---|
GetPersonnelForCallGrid | callId | Personnel with ETA to call location |
GetPersonnelForGridWithFilter | filterSelf | Basic personnel list (optionally excluding self) |
GetPersonnelList | — | Full personnel list with admin/disabled/hidden state |
GetPersonnelListPaged | perPage, page | Paginated personnel list |
ETA Calculation
When displaying personnel for a call, the system calculates Estimated Time of Arrival:
- Gets the user's last known GPS location
- Gets the call's GPS coordinates
- Uses
IGeoService.GetEtaInSecondsAsyncto calculate travel time - Displays ETA alongside personnel information
Role Data
| Endpoint | Purpose |
|---|---|
GetRoles | All department roles |
GetCertifications | All certification types |
GetRolesForUser | Roles assigned to a specific user |
Interactions with Other Modules
| Module | Interaction |
|---|---|
| Dashboard | Personnel status displayed on main dashboard |
| Dispatch | Personnel dispatched to calls |
| Groups | Personnel belong to groups/stations |
| Shifts | Personnel sign up for shifts |
| Custom Statuses | Custom status levels shown for personnel |
| Mapping | Personnel location shown on maps (permission-controlled) |
| Reports | Personnel data used in roster and staffing reports |
| Trainings | Personnel assigned to trainings |
| Profile | Certifications and schedules managed per person |
| Security | Visibility matrix controls who can see whom |