a6287fc06d
* init db migration * WIP store view * create service call * WIP insertion * insert sort of works * moving code arounmd * creation tests * avoid duplicate entries * fixes from main * basic group retrieval works * group filtering works * WIP view listing * filter by acl * fixes + WIP single group retrieval * wip pivot * more pivot query fixes * tests fixed after pivot * views list tests * fixing test command * business plan only checks * more tests for coverage * .dts import fix * cli fix * anutha one * auth policy tests for business plan access * WIP saved views panel base * BE listing adjustments * WIP group rendering * group render done * WIP post create cache updates * listing fine? * my vs theirs * auto open * minor fixes * click load omg * nicely loading views * type fix * less spammy loading * another type fix: * more lint fix * test fix * codecov disable * moar coverage * fix sidebar flashin * more test coverage * more test cvoverage * minor adfjustments * adj * saved view wipe fixes * CSR viewer * more improvements * extra feature flag checks * lint fix * feature flags fix * more test fixes
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import type { GetWorkspacePlan } from '@/modules/gatekeeper/domain/billing'
|
|
import type {
|
|
CanWorkspaceAccessFeature,
|
|
WorkspaceFeatureAccessFunction
|
|
} from '@/modules/gatekeeper/domain/operations'
|
|
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
|
|
import { throwUncoveredError, workspacePlanHasAccessToFeature } from '@speckle/shared'
|
|
|
|
export const canWorkspaceAccessFeatureFactory =
|
|
({
|
|
getWorkspacePlan
|
|
}: {
|
|
getWorkspacePlan: GetWorkspacePlan
|
|
}): CanWorkspaceAccessFeature =>
|
|
async ({ workspaceId, workspaceFeature }) => {
|
|
const workspacePlan = await getWorkspacePlan({ workspaceId })
|
|
if (!workspacePlan) return false
|
|
switch (workspacePlan.status) {
|
|
case 'valid':
|
|
case 'paymentFailed':
|
|
case 'cancelationScheduled':
|
|
break
|
|
case 'canceled':
|
|
return false
|
|
default:
|
|
throwUncoveredError(workspacePlan)
|
|
}
|
|
|
|
return workspacePlanHasAccessToFeature({
|
|
plan: workspacePlan.name,
|
|
feature: workspaceFeature,
|
|
featureFlags: getFeatureFlags()
|
|
})
|
|
}
|
|
|
|
export const canWorkspaceUseOidcSsoFactory =
|
|
(deps: { getWorkspacePlan: GetWorkspacePlan }): WorkspaceFeatureAccessFunction =>
|
|
async ({ workspaceId }) =>
|
|
canWorkspaceAccessFeatureFactory(deps)({ workspaceId, workspaceFeature: 'oidcSso' })
|
|
|
|
export const canWorkspaceUseRegionsFactory =
|
|
(deps: { getWorkspacePlan: GetWorkspacePlan }): WorkspaceFeatureAccessFunction =>
|
|
async ({ workspaceId }) =>
|
|
canWorkspaceAccessFeatureFactory(deps)({
|
|
workspaceId,
|
|
workspaceFeature: 'workspaceDataRegionSpecificity'
|
|
})
|
|
|
|
export const canWorkspaceUseDomainBasedSecurityPolicies =
|
|
(deps: { getWorkspacePlan: GetWorkspacePlan }): WorkspaceFeatureAccessFunction =>
|
|
async ({ workspaceId }) =>
|
|
canWorkspaceAccessFeatureFactory(deps)({
|
|
workspaceId,
|
|
workspaceFeature: 'domainBasedSecurityPolicies'
|
|
})
|