26 lines
788 B
TypeScript
26 lines
788 B
TypeScript
|
|
import {
|
||
|
|
CanActivate,
|
||
|
|
ExecutionContext,
|
||
|
|
Injectable,
|
||
|
|
UnauthorizedException,
|
||
|
|
} from '@nestjs/common';
|
||
|
|
import { PrismaService } from '../../../prisma/prisma.service';
|
||
|
|
import { assertClinicOrganization } from '../../common/organization-type';
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class ClinicOrgGuard implements CanActivate {
|
||
|
|
constructor(private readonly prisma: PrismaService) {}
|
||
|
|
|
||
|
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||
|
|
const request = context.switchToHttp().getRequest<{ user?: { organizationId?: string } }>();
|
||
|
|
const organizationId = request.user?.organizationId;
|
||
|
|
|
||
|
|
if (!organizationId) {
|
||
|
|
throw new UnauthorizedException('Organization is not selected');
|
||
|
|
}
|
||
|
|
|
||
|
|
await assertClinicOrganization(this.prisma, organizationId);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|