mirror of
https://github.com/Unleash/unleash.git
synced 2025-03-04 00:18:40 +01:00
36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { IUnleashConfig, IUnleashStores } from '../../types';
|
|
import { IPrivateProjectStore } from './privateProjectStoreType';
|
|
import { IPrivateProjectChecker } from './privateProjectCheckerType';
|
|
import { ALL_PROJECT_ACCESS, ProjectAccess } from './privateProjectStore';
|
|
|
|
export class PrivateProjectChecker implements IPrivateProjectChecker {
|
|
private privateProjectStore: IPrivateProjectStore;
|
|
|
|
private isEnterprise: boolean;
|
|
|
|
constructor(
|
|
{ privateProjectStore }: Pick<IUnleashStores, 'privateProjectStore'>,
|
|
{ isEnterprise }: Pick<IUnleashConfig, 'isEnterprise'>,
|
|
) {
|
|
this.privateProjectStore = privateProjectStore;
|
|
this.isEnterprise = isEnterprise;
|
|
}
|
|
|
|
async getUserAccessibleProjects(userId: number): Promise<ProjectAccess> {
|
|
return this.isEnterprise
|
|
? this.privateProjectStore.getUserAccessibleProjects(userId)
|
|
: Promise.resolve(ALL_PROJECT_ACCESS);
|
|
}
|
|
|
|
async hasAccessToProject(
|
|
userId: number,
|
|
projectId: string,
|
|
): Promise<boolean> {
|
|
const projectAccess = await this.getUserAccessibleProjects(userId);
|
|
return (
|
|
projectAccess.mode === 'all' ||
|
|
projectAccess.projects.includes(projectId)
|
|
);
|
|
}
|
|
}
|