From 664f257239e28ef52c6ad99e441b2d195ff57f44 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 22 Aug 2023 11:27:06 +0300 Subject: [PATCH] Implemment checks --- .../tests/core/utilities/mocks/licenses.ts | 4 ++ .../server/src/sdk/app/permissions/index.ts | 5 ++ .../app/permissions/tests/permissions.spec.ts | 52 +++++++++++++++++++ packages/types/src/sdk/licensing/feature.ts | 1 + 4 files changed, 62 insertions(+) create mode 100644 packages/server/src/sdk/app/permissions/tests/permissions.spec.ts diff --git a/packages/backend-core/tests/core/utilities/mocks/licenses.ts b/packages/backend-core/tests/core/utilities/mocks/licenses.ts index 14a1f1f4d3..309f0fd159 100644 --- a/packages/backend-core/tests/core/utilities/mocks/licenses.ts +++ b/packages/backend-core/tests/core/utilities/mocks/licenses.ts @@ -102,6 +102,10 @@ export const useAppBuilders = () => { return useFeature(Feature.APP_BUILDERS) } +export const useViewPermissions = () => { + return useFeature(Feature.VIEW_PERMISSIONS) +} + // QUOTAS export const setAutomationLogsQuota = (value: number) => { diff --git a/packages/server/src/sdk/app/permissions/index.ts b/packages/server/src/sdk/app/permissions/index.ts index ad78310bb5..2219120db6 100644 --- a/packages/server/src/sdk/app/permissions/index.ts +++ b/packages/server/src/sdk/app/permissions/index.ts @@ -4,6 +4,7 @@ import { VirtualDocumentType, } from "@budibase/types" import { isViewID } from "../../../db/utils" +import { features } from "@budibase/pro" type ResourceActionAllowedResult = | { allowed: true } @@ -24,6 +25,10 @@ export async function resourceActionAllowed({ return { allowed: true } } + if (await features.isViewPermissionEnabled()) { + return { allowed: true } + } + return { allowed: false, level, diff --git a/packages/server/src/sdk/app/permissions/tests/permissions.spec.ts b/packages/server/src/sdk/app/permissions/tests/permissions.spec.ts new file mode 100644 index 0000000000..4c2768dde4 --- /dev/null +++ b/packages/server/src/sdk/app/permissions/tests/permissions.spec.ts @@ -0,0 +1,52 @@ +import TestConfiguration from "../../../../tests/utilities/TestConfiguration" +import { PermissionLevel } from "@budibase/types" +import { mocks, structures } from "@budibase/backend-core/tests" +import { resourceActionAllowed } from ".." +import { generateViewID } from "../../../../db/utils" + +describe("permissions sdk", () => { + beforeEach(() => { + new TestConfiguration() + mocks.licenses.useCloudFree() + }) + + describe("resourceActionAllowed", () => { + it("non view resources actions are always allowed", async () => { + const resourceId = structures.users.user()._id! + + const result = await resourceActionAllowed({ + resourceId, + level: PermissionLevel.READ, + }) + + expect(result).toEqual({ allowed: true }) + }) + + it("view resources actions allowed if the feature flag is enabled", async () => { + mocks.licenses.useViewPermissions() + const resourceId = generateViewID(structures.generator.guid()) + + const result = await resourceActionAllowed({ + resourceId, + level: PermissionLevel.READ, + }) + + expect(result).toEqual({ allowed: true }) + }) + + it("view resources actions allowed if the feature flag is disabled", async () => { + const resourceId = generateViewID(structures.generator.guid()) + + const result = await resourceActionAllowed({ + resourceId, + level: PermissionLevel.READ, + }) + + expect(result).toEqual({ + allowed: false, + level: "read", + resourceType: "view", + }) + }) + }) +}) diff --git a/packages/types/src/sdk/licensing/feature.ts b/packages/types/src/sdk/licensing/feature.ts index a1ace01e48..218c2c5429 100644 --- a/packages/types/src/sdk/licensing/feature.ts +++ b/packages/types/src/sdk/licensing/feature.ts @@ -12,6 +12,7 @@ export enum Feature { APP_BUILDERS = "appBuilders", OFFLINE = "offline", USER_ROLE_PUBLIC_API = "userRolePublicApi", + VIEW_PERMISSIONS = "viewPermission", } export type PlanFeatures = { [key in PlanType]: Feature[] | undefined }