EQMS-1302: fixed RBAC bypass for space / team related wizards and popups (develop port) (#8979)

Signed-off-by: Victor Ilyushchenko <alt13ri@gmail.com>
This commit is contained in:
Victor Ilyushchenko
2025-05-17 01:58:25 +04:00
committed by GitHub
parent ec61340150
commit b79afafa77
7 changed files with 55 additions and 34 deletions
@@ -13,12 +13,12 @@
// limitations under the License.
-->
<script lang="ts">
import { createEventDispatcher } from 'svelte'
import { Label } from '@hcengineering/ui'
import { TypedSpace, type Data, type Ref, type Permission } from '@hcengineering/core'
import { type Employee, type PermissionsStore, getCurrentEmployee } from '@hcengineering/contact'
import { getCurrentEmployee, type Employee } from '@hcengineering/contact'
import { UserBoxItems, getPermittedPersons, permissionsStore } from '@hcengineering/contact-resources'
import documents, { type ControlledDocument } from '@hcengineering/controlled-documents'
import { UserBoxItems, permissionsStore } from '@hcengineering/contact-resources'
import { TypedSpace, type Data, type Ref } from '@hcengineering/core'
import { Label } from '@hcengineering/ui'
import { createEventDispatcher } from 'svelte'
export let controlledDoc: Data<ControlledDocument>
export let space: Ref<TypedSpace>
@@ -34,23 +34,23 @@
$: permissionsSpace = space === documents.space.UnsortedTemplates ? documents.space.QualityDocuments : space
function getPermittedPersons (
permission: Ref<Permission>,
space: Ref<TypedSpace>,
permissionsStore: PermissionsStore
): Ref<Employee>[] {
return Array.from(permissionsStore.ap[space]?.[permission] ?? []) as Ref<Employee>[]
}
$: permittedReviewers = getPermittedPersons(
documents.permission.ReviewDocument,
permissionsSpace,
$permissionsStore
) as Ref<Employee>[]
$: permittedReviewers = getPermittedPersons(documents.permission.ReviewDocument, permissionsSpace, $permissionsStore)
$: permittedApprovers = getPermittedPersons(documents.permission.ApproveDocument, permissionsSpace, $permissionsStore)
$: permittedApprovers = getPermittedPersons(
documents.permission.ApproveDocument,
permissionsSpace,
$permissionsStore
) as Ref<Employee>[]
$: permittedCoAuthors = getPermittedPersons(
documents.permission.CoAuthorDocument,
permissionsSpace,
$permissionsStore
).filter((person) => person !== currentEmployee)
).filter((person) => person !== currentEmployee) as Ref<Employee>[]
function handleUsersUpdated (type: 'reviewers' | 'approvers' | 'coAuthors', users: Ref<Employee>[]): void {
dispatch('update', { type, users })
@@ -25,10 +25,10 @@
type Project,
type ProjectDocument
} from '@hcengineering/controlled-documents'
import { type Doc, type Ref, type Space } from '@hcengineering/core'
import { TypedSpace, type Doc, type Ref, type Space } from '@hcengineering/core'
import presentation, { getClient, SpaceSelector } from '@hcengineering/presentation'
import { Button, Label } from '@hcengineering/ui'
import { permissionsStore } from '@hcengineering/contact-resources'
import { checkMyPermission, permissionsStore } from '@hcengineering/contact-resources'
import { createEventDispatcher } from 'svelte'
import documentsRes from '../../../plugin'
@@ -139,9 +139,9 @@
const externalSpaces = hierarchy.getDescendants(documents.class.ExternalSpace)
$: hasParentSelector = targetSpaceId !== documents.space.UnsortedTemplates
$: permissionRestrictedSpaces = Object.entries($permissionsStore.ps)
.filter(([, pss]) => !pss.has(documents.permission.CreateDocument))
.map(([s]) => s) as Ref<Space>[]
$: permissionRestrictedSpaces = Object.keys($permissionsStore.ps).filter(
(s) => !checkMyPermission(documents.permission.CreateDocument, s as Ref<TypedSpace>, $permissionsStore)
) as Ref<TypedSpace>[]
$: restrictedSpaces =
sourceSpaceId !== undefined ? permissionRestrictedSpaces.concat(sourceSpaceId) : permissionRestrictedSpaces