39 lines
1.4 KiB
TypeScript
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);
|
|
}
|
|
}
|