From b7a22d05f9602108752c981018fefd0eddb7ae86 Mon Sep 17 00:00:00 2001 From: seongjinyoon Date: Wed, 14 Jan 2026 15:00:41 -0800 Subject: [PATCH] allow workflow access level edit --- .../workflow/WorkflowAccessResource.scala | 9 ++- .../share-access/share-access.component.html | 11 +++- .../share-access/share-access.component.ts | 64 ++++++++++++++++++- 3 files changed, 80 insertions(+), 4 deletions(-) diff --git a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala index 2c92352a084..799e3d7c5dd 100644 --- a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala +++ b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala @@ -33,6 +33,7 @@ import org.apache.texera.dao.jooq.generated.tables.pojos.WorkflowUserAccess import org.apache.texera.web.model.common.AccessEntry import org.apache.texera.web.resource.dashboard.user.workflow.WorkflowAccessResource.{ context, + getPrivilege, hasWriteAccess } import org.jooq.DSLContext @@ -174,10 +175,16 @@ class WorkflowAccessResource() { @PathParam("privilege") privilege: String, @Auth user: SessionUser ): Unit = { - if (email.equals(user.getEmail)) { + val isModifyingOwnAccess = email.equals(user.getEmail) + val currentPrivilege = getPrivilege(wid, user.getUid) + val hasExistingAccess = !currentPrivilege.eq(PrivilegeEnum.NONE) + + // Users can only modify their own access if they already have access + if (isModifyingOwnAccess && !hasExistingAccess) { throw new BadRequestException("You cannot grant access to yourself!") } + // Must have write access to modify access levels (including your own) if (!hasWriteAccess(wid, user.getUid)) { throw new ForbiddenException(s"You do not have permission to modify workflow $wid") } diff --git a/frontend/src/app/dashboard/component/user/share-access/share-access.component.html b/frontend/src/app/dashboard/component/user/share-access/share-access.component.html index 717c1cbc188..055456236d2 100644 --- a/frontend/src/app/dashboard/component/user/share-access/share-access.component.html +++ b/frontend/src/app/dashboard/component/user/share-access/share-access.component.html @@ -151,9 +151,16 @@ id="current-share">
  • OWNER {{ owner }}
  • - {{ entry.privilege }} {{ entry.email }} ({{ entry.name }}) + + {{ entry.email }} ({{ entry.name }})