diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 33bfb151a9..c06a476409 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -568,6 +568,27 @@ export async function checkPermission ( const arePermissionsDisabled = getMetadata(core.metadata.DisablePermissions) ?? false if (arePermissionsDisabled) return true + return await hasPermission(client, _id, _space, space) +} + +export async function checkForbiddenPermission ( + client: TxOperations, + _id: Ref, + _space: Ref, + space?: TypedSpace +): Promise { + const arePermissionsDisabled = getMetadata(core.metadata.DisablePermissions) ?? false + if (arePermissionsDisabled) return false + + return await hasPermission(client, _id, _space, space) +} + +async function hasPermission ( + client: TxOperations, + _id: Ref, + _space: Ref, + space?: TypedSpace +): Promise { space = space ?? (await client.findOne(core.class.TypedSpace, { _id: _space })) const type = await client .getModel() diff --git a/plugins/view-resources/src/visibilityTester.ts b/plugins/view-resources/src/visibilityTester.ts index 9d6fda382f..4a89d9dd17 100644 --- a/plugins/view-resources/src/visibilityTester.ts +++ b/plugins/view-resources/src/visibilityTester.ts @@ -15,6 +15,7 @@ import core, { checkPermission, + checkForbiddenPermission, getCurrentAccount, toIdMap, AccountRole, @@ -50,7 +51,7 @@ export async function canDeleteObject (doc?: Doc | Doc[]): Promise { return !( await Promise.all( Array.from(targetSpaces.entries()).map( - async (s) => await checkPermission(client, core.permission.ForbidDeleteObject, s[0], s[1]) + async (s) => await checkForbiddenPermission(client, core.permission.ForbidDeleteObject, s[0], s[1]) ) ) ).some((r) => r)