feat: complete jobcard management workflows and UI

This commit is contained in:
Marco0300
2026-09-01 21:47:35 +02:00
parent b983f90dcb
commit 9ce08bc6f8
27 changed files with 1081 additions and 115 deletions
+9
View File
@@ -62,6 +62,15 @@ if (!isset($weakReset['errors']['password'])) throw new RuntimeException('Weak p
$payloadReset = $users->validateReset(['password' => 'Unique&Secure123']);
user_admin_assert_same(true, $payloadReset['valid'], 'Password-only reset payloads should be supported.');
// Administrator identity is authoritative from the immutable user ID, even when
// a controller passes only editable fields and omits current role/name fields.
$protectedEdit = $users->validateEdit(1, [
'name' => 'Renamed', 'email' => 'admin.updated@example.test', 'role_id' => 2, 'is_active' => true,
]);
user_admin_assert_same(false, $protectedEdit['valid'], 'User ID 1 must remain protected without current fields.');
if (!isset($protectedEdit['errors']['role_id'])) throw new RuntimeException('Administrator reassignment must be rejected from ID alone.');
user_admin_assert_same(false, $users->validateDeactivate(['id' => 1, 'is_active' => true])['valid'], 'Administrator deactivation must be rejected from ID alone.');
$roles = new RolePermissionService();
$available = ['clients.view', 'clients.manage', 'reports.view'];
$assignment = $roles->validateAssignment(['id' => 4, 'name' => 'Support'], [' CLIENTS.VIEW ', 'reports.view', 'clients.view'], $available);