Files
calendar/packages/features/pbac/services/role-management.factory.ts
sean-brydonGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
e3742dbc66 fix: Always enforce one owner with pbac (#24144)
* Always enforce one owner

* updates from merge

* remove redudant eslint rules

* Update packages/features/pbac/services/pbac-role-manager.service.ts

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-01 11:06:18 +01:00

38 lines
1.5 KiB
TypeScript

import { FeaturesRepository } from "@calcom/features/flags/features.repository";
import { prisma } from "@calcom/prisma";
import { LegacyRoleManager } from "./legacy-role-manager.service";
import { PBACRoleManager } from "./pbac-role-manager.service";
import { PermissionCheckService } from "./permission-check.service";
import { IRoleManager } from "./role-manager.interface";
import { RoleService } from "./role.service";
export class RoleManagementFactory {
private static instance: RoleManagementFactory;
private featuresRepository: FeaturesRepository;
private roleService: RoleService;
private permissionCheckService: PermissionCheckService;
private constructor() {
// Not used but needed for DI
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
(this.featuresRepository = new FeaturesRepository(prisma)), (this.roleService = new RoleService());
this.permissionCheckService = new PermissionCheckService();
}
public static getInstance(): RoleManagementFactory {
if (!RoleManagementFactory.instance) {
RoleManagementFactory.instance = new RoleManagementFactory();
}
return RoleManagementFactory.instance;
}
async createRoleManager(organizationId: number): Promise<IRoleManager> {
const isPBACEnabled = await this.featuresRepository.checkIfTeamHasFeature(organizationId, "pbac");
return isPBACEnabled
? new PBACRoleManager(this.roleService, this.permissionCheckService)
: new LegacyRoleManager();
}
}