Files
bgApp/src/orm/claims.ts

39 lines
1.4 KiB
TypeScript

import { sql } from 'bun';
import { ClaimDefinition } from '../utilities/claimDefinitions';
import { SecureId } from '../utilities/requestModels';
export class Claims extends ClaimDefinition {
userId?: SecureId;
claims: string[] = [];
constructor(raw?:{userId?:string, claims?: string[]}) {
super();
this.userId = raw?.userId ? SecureId.fromHash(raw.userId) : undefined;
this.claims = raw?.claims ?? [];
}
public static test(guardClaim: string, userClaims?: Claims): Boolean {
return userClaims === undefined || userClaims.claims.some((x) => x === guardClaim);
}
}
export class ClaimsOrm {
async getByUserId(userId: string): Promise<Claims> {
const dbResults: any[] = await sql`SELECT c.name
from user_claims as uc
JOIN claims as c on uc.claim_id = c.id
where uc.user_id = ${userId};`;
const claims = new Claims();
claims.userId = SecureId.fromID(userId);
claims.claims = dbResults.map((x) => x.name);
return claims;
}
async getDefaultClaims(): Promise<number[]> {
const dbResults: any[] = await sql`SELECT id
FROM claims
WHERE is_default = true;`;
return dbResults.map((x) => x.id);
}
}