Fixed GET users

This commit is contained in:
2026-06-18 18:15:20 +03:30
parent d8f7766f10
commit dcc3ee71de
11 changed files with 368 additions and 103 deletions

View File

@@ -1,5 +1,4 @@
import { BadRequestException, ForbiddenException } from "@nestjs/common";
import { RoleEnum } from "src/Types&Enums/role.enum";
/** Insurance company tenant id on the actor JWT (Mongo ObjectId string). */
export function requireActorClientKey(actor: { clientKey?: string }): string {
@@ -65,13 +64,12 @@ export function blameCaseAccessibleToExpert(
return blameCaseTouchesClient(doc, ck);
}
/** True when the acting field expert created this expert-initiated blame file. */
/** True when `actor` is the field expert who created this expert-initiated blame file. */
export function blameCaseInitiatedByFieldExpert(
doc: any,
actor: { sub: string; role?: string },
actor: { sub: string },
): boolean {
return (
actor.role === RoleEnum.FIELD_EXPERT &&
!!doc?.expertInitiated &&
!!doc?.initiatedByFieldExpertId &&
String(doc.initiatedByFieldExpertId) === String(actor.sub)
@@ -102,28 +100,40 @@ export function assertClaimCaseForTenant(
}
/**
* Returns true when a field expert (no clientKey) initiated this claim via an
* expert-initiated IN_PERSON blame file.
* True when the field expert initiated this claim directly or via the linked
* expert-initiated blame file (`blameRequestId` → blame.initiatedByFieldExpertId).
*/
export function claimCaseInitiatedByFieldExpert(
doc: any,
actor: { sub: string },
blame?: { expertInitiated?: boolean; initiatedByFieldExpertId?: unknown } | null,
): boolean {
return (
!!doc.initiatedByFieldExpertId &&
if (
doc?.initiatedByFieldExpertId &&
String(doc.initiatedByFieldExpertId) === String(actor.sub)
);
) {
return true;
}
if (
blame?.expertInitiated &&
blame?.initiatedByFieldExpertId &&
String(blame.initiatedByFieldExpertId) === String(actor.sub)
) {
return true;
}
return false;
}
/**
* Authorization check that works for both damage experts (clientKey tenant
* scope) and field experts (initiatedByFieldExpertId ownership).
* scope) and field experts (initiatedByFieldExpertId / linked blame ownership).
*/
export function assertClaimCaseForExpertActor(
doc: any,
actor: { sub: string; clientKey?: string },
blame?: { expertInitiated?: boolean; initiatedByFieldExpertId?: unknown } | null,
): void {
if (claimCaseInitiatedByFieldExpert(doc, actor)) return;
if (claimCaseInitiatedByFieldExpert(doc, actor, blame)) return;
assertClaimCaseForTenant(doc, actor);
}