Do not select space not accessible to the user (#10707)

Signed-off-by: Artem Savchenko <armisav@gmail.com>
This commit is contained in:
Artyom Savchenko
2026-03-30 22:44:00 +05:00
committed by GitHub
parent d09f05acb4
commit 2bb87bf441
4 changed files with 36 additions and 10 deletions
@@ -364,7 +364,7 @@
}
$: if (_space !== undefined) {
spaceQuery.query(tracker.class.Project, { _id: _space }, (res) => {
spaceQuery.query(tracker.class.Project, { _id: _space, members: getCurrentAccount().uuid }, (res) => {
resetDefaultAssigneeId()
currentProject = res[0]
})
@@ -689,6 +689,13 @@
let attachments: Map<Ref<Attachment>, Attachment> = new Map<Ref<Attachment>, Attachment>()
function isMemberOfProject (project: Project | undefined): boolean {
if (project == null) return false
const members = project.members
if (!Array.isArray(members)) return true
return members.includes(me.uuid)
}
async function findDefaultSpace (): Promise<Project | undefined> {
let targetRef: Ref<Project> | undefined
if (relatedTo !== undefined) {
@@ -733,12 +740,14 @@
}
})
if (projects.length > 0) {
return projects[0]
const candidate = projects[0]
return isMemberOfProject(candidate) ? candidate : undefined
}
}
if (targetRef !== undefined) {
return await client.findOne(tracker.class.Project, { _id: targetRef })
const candidate = await client.findOne(tracker.class.Project, { _id: targetRef })
return isMemberOfProject(candidate) ? candidate : undefined
}
}
@@ -773,6 +782,10 @@
<svelte:fragment slot="header">
<SpaceSelector
_class={tracker.class.Project}
query={{
archived: false,
members: getCurrentAccount().uuid
}}
label={tracker.string.Project}
bind:space={_space}
on:object={(evt) => {
@@ -782,6 +795,7 @@
size={'small'}
component={ProjectPresenter}
defaultIcon={tracker.icon.Home}
clearInvalidValue={true}
{findDefaultSpace}
/>
<ObjectBox
@@ -1054,7 +1068,7 @@
<Button
loading={okProcessing}
focusIndex={10001}
disabled={!canSave}
disabled={canSave !== true}
label={okLabel}
kind={'primary'}
size={'large'}