From a40bc3872550f5b160d56566fe695f05cbc1321f Mon Sep 17 00:00:00 2001 From: Mark Rai Date: Mon, 30 Mar 2026 13:39:36 -0400 Subject: [PATCH] bugfix: when run in anonymous mode, certain fields were gettin blocked from being edited Signed-off-by: Mark Rai --- internal/httpapi/web/dist/dialogs/todo.js | 10 ++++++---- internal/httpapi/web/modules/dialogs/todo.ts | 10 ++++++---- internal/version/version.go | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/internal/httpapi/web/dist/dialogs/todo.js b/internal/httpapi/web/dist/dialogs/todo.js index 0c75978..25b52ce 100644 --- a/internal/httpapi/web/dist/dialogs/todo.js +++ b/internal/httpapi/web/dist/dialogs/todo.js @@ -723,17 +723,19 @@ export async function openTodoDialog(opts) { setEditingTodo(mode === "edit" ? todo : null); bindDialogLinkLifecycle(); // Compute permissions once (mode-aware so create never inherits stale assignment state) - const isMaintainer = (opts.role ?? "") === "maintainer"; + const board = getBoard(); + const anonymousBoard = isAnonymousBoard(board); + const isMaintainer = (opts.role ?? "") === "maintainer" || anonymousBoard; const currentUser = getUser(); const isAssignedToMe = currentUser && mode === "edit" && Number(todo?.assigneeUserId) === Number(currentUser.id); permissions = { - canChangeSprint: isMaintainer, + canChangeSprint: isMaintainer && !anonymousBoard, canChangeEstimation: isMaintainer, canEditTags: isMaintainer, - canEditNotes: isMaintainer || (opts.role === "contributor" && !!isAssignedToMe), - canEditAssignment: isMaintainer, + canEditNotes: isMaintainer || (!anonymousBoard && opts.role === "contributor" && !!isAssignedToMe), + canEditAssignment: isMaintainer && !anonymousBoard, canDeleteTodo: isMaintainer, }; // Fetch available tags for autocomplete diff --git a/internal/httpapi/web/modules/dialogs/todo.ts b/internal/httpapi/web/modules/dialogs/todo.ts index 9bdd7d2..1c1f0fb 100644 --- a/internal/httpapi/web/modules/dialogs/todo.ts +++ b/internal/httpapi/web/modules/dialogs/todo.ts @@ -791,18 +791,20 @@ export async function openTodoDialog(opts: { mode: string; todo?: any; status?: bindDialogLinkLifecycle(); // Compute permissions once (mode-aware so create never inherits stale assignment state) - const isMaintainer = (opts.role ?? "") === "maintainer"; + const board = getBoard(); + const anonymousBoard = isAnonymousBoard(board); + const isMaintainer = (opts.role ?? "") === "maintainer" || anonymousBoard; const currentUser = getUser(); const isAssignedToMe = currentUser && mode === "edit" && Number(todo?.assigneeUserId) === Number(currentUser.id); permissions = { - canChangeSprint: isMaintainer, + canChangeSprint: isMaintainer && !anonymousBoard, canChangeEstimation: isMaintainer, canEditTags: isMaintainer, - canEditNotes: isMaintainer || (opts.role === "contributor" && !!isAssignedToMe), - canEditAssignment: isMaintainer, + canEditNotes: isMaintainer || (!anonymousBoard && opts.role === "contributor" && !!isAssignedToMe), + canEditAssignment: isMaintainer && !anonymousBoard, canDeleteTodo: isMaintainer, }; diff --git a/internal/version/version.go b/internal/version/version.go index b851cfc..58400c7 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -8,7 +8,7 @@ package version // // Convention: Update when releasing (e.g., "1.0.0", "1.1.0"); match git tags // (e.g., tag "v1.0.0" should have Version = "1.0.0"). -const Version = "3.5.7" +const Version = "3.5.8" // ExportFormatVersion is the version of the backup/export data format. // Only increment this when the ExportData structure changes in a breaking way.