From 8fb7959abca8c58e5c381ce473194023268d7a00 Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Thu, 6 Jul 2023 16:27:57 -0700 Subject: [PATCH 1/9] init --- .../user/file/UserFileAccessResource.scala | 6 ++-- .../user/project/ProjectAccessResource.scala | 3 +- .../workflow/WorkflowAccessResource.scala | 6 ++-- .../user/workflow/WorkflowResource.scala | 32 ++++++------------- .../share-access/share-access.component.html | 2 +- .../user-file-list-item.component.html | 11 +------ .../user-project-list-item.component.html | 7 +--- .../user-workflow-list-item.component.html | 25 +++------------ .../user-workflow/user-workflow.component.ts | 21 +----------- .../user/type/dashboard-project.interface.ts | 1 + 10 files changed, 24 insertions(+), 90 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala index 2ff4193c9cb..c46a2489e87 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala @@ -129,8 +129,7 @@ class UserFileAccessResource { @GET @Path("/owner/{fid}") def getOwner(@PathParam("fid") fid: UInteger): String = { - val uid = fileDao.fetchOneByFid(fid).getOwnerUid - userDao.fetchOneByUid(uid).getEmail + userDao.fetchOneByUid(fileDao.fetchOneByFid(fid).getOwnerUid).getEmail } /** @@ -143,7 +142,6 @@ class UserFileAccessResource { @Path("list/{fid}") def getAccessList( @PathParam("fid") fid: UInteger, - @Auth user: SessionUser ): util.List[AccessEntry] = { context .select( @@ -157,7 +155,7 @@ class UserFileAccessResource { .where( USER_FILE_ACCESS.FID .eq(fid) - .and(USER_FILE_ACCESS.UID.notEqual(user.getUid)) + .and(USER_FILE_ACCESS.UID.notEqual(fileDao.fetchOneByFid(fid).getOwnerUid)) ) .fetchInto(classOf[AccessEntry]) } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala index 553a7185bf5..19e16d279ef 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala @@ -47,7 +47,6 @@ class ProjectAccessResource() { @Path("/list/{pid}") def getAccessList( @PathParam("pid") pid: UInteger, - @Auth user: SessionUser ): util.List[AccessEntry] = { context .select( @@ -58,7 +57,7 @@ class ProjectAccessResource() { .from(PROJECT_USER_ACCESS) .join(USER) .on(USER.UID.eq(PROJECT_USER_ACCESS.UID)) - .where(PROJECT_USER_ACCESS.PID.eq(pid).and(PROJECT_USER_ACCESS.UID.notEqual(user.getUid))) + .where(PROJECT_USER_ACCESS.PID.eq(pid).and(PROJECT_USER_ACCESS.UID.notEqual(projectDao.fetchOneByPid(pid).getOwnerId))) .fetchInto(classOf[AccessEntry]) } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala index 153202f3a79..ff71bec6e2e 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala @@ -98,8 +98,7 @@ class WorkflowAccessResource() { @GET @Path("/owner/{wid}") def getOwner(@PathParam("wid") wid: UInteger): String = { - val uid = workflowOfUserDao.fetchByWid(wid).get(0).getUid - userDao.fetchOneByUid(uid).getEmail + userDao.fetchOneByUid(workflowOfUserDao.fetchByWid(wid).get(0).getUid).getEmail } /** @@ -112,7 +111,6 @@ class WorkflowAccessResource() { @Path("/list/{wid}") def getAccessList( @PathParam("wid") wid: UInteger, - @Auth sessionUser: SessionUser ): util.List[AccessEntry] = { context .select( @@ -126,7 +124,7 @@ class WorkflowAccessResource() { .where( WORKFLOW_USER_ACCESS.WID .eq(wid) - .and(WORKFLOW_USER_ACCESS.UID.notEqual(sessionUser.getUser.getUid)) + .and(WORKFLOW_USER_ACCESS.UID.notEqual(workflowOfUserDao.fetchByWid(wid).get(0).getUid)) ) .fetchInto(classOf[AccessEntry]) } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala index aaf22f4308f..c50a5ca2eb9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala @@ -4,11 +4,7 @@ import edu.uci.ics.texera.web.SqlServer import edu.uci.ics.texera.web.auth.SessionUser import edu.uci.ics.texera.web.model.jooq.generated.Tables._ import edu.uci.ics.texera.web.model.jooq.generated.enums.WorkflowUserAccessPrivilege -import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{ - WorkflowDao, - WorkflowOfUserDao, - WorkflowUserAccessDao -} +import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{WorkflowDao, WorkflowOfUserDao, WorkflowUserAccessDao} import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos._ import edu.uci.ics.texera.web.resource.dashboard.user.workflow.WorkflowResource._ import io.dropwizard.auth.Auth @@ -18,6 +14,7 @@ import org.jooq.types.UInteger import java.sql.Timestamp import java.text.{ParseException, SimpleDateFormat} +import java.util import java.util.concurrent.TimeUnit import javax.annotation.security.RolesAllowed import javax.ws.rs._ @@ -242,17 +239,12 @@ class WorkflowResource { @GET @Path("/workflow-ids") @RolesAllowed(Array("REGULAR", "ADMIN")) - def retrieveIDs(@Auth sessionUser: SessionUser): List[String] = { - val user = sessionUser.getUser - val workflowEntries = context + def retrieveIDs(@Auth user: SessionUser): util.List[String] = { + context .select(WORKFLOW_USER_ACCESS.WID) .from(WORKFLOW_USER_ACCESS) .where(WORKFLOW_USER_ACCESS.UID.eq(user.getUid)) - .fetch() - - workflowEntries - .map(workflowRecord => workflowRecord.into(WORKFLOW_OF_USER).getWid.intValue().toString) - .toList + .fetchInto(classOf[String]) } /** @@ -263,22 +255,16 @@ class WorkflowResource { @GET @Path("/owners") @RolesAllowed(Array("REGULAR", "ADMIN")) - def retrieveOwners(@Auth sessionUser: SessionUser): List[String] = { - val user = sessionUser.getUser - val workflowEntries = context - .select(USER.EMAIL) + def retrieveOwners(@Auth user: SessionUser): util.List[String] = { + context + .selectDistinct(USER.EMAIL) .from(WORKFLOW_USER_ACCESS) .join(WORKFLOW_OF_USER) .on(WORKFLOW_USER_ACCESS.WID.eq(WORKFLOW_OF_USER.WID)) .join(USER) .on(WORKFLOW_OF_USER.UID.eq(USER.UID)) .where(WORKFLOW_USER_ACCESS.UID.eq(user.getUid)) - .groupBy(USER.UID) - .fetch() - - workflowEntries - .map(workflowRecord => workflowRecord.into(USER).getEmail) - .toList + .fetchInto(classOf[String]) } /** diff --git a/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html b/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html index fd14daa6d61..5c027ddc8cc 100644 --- a/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html +++ b/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html @@ -51,7 +51,7 @@
- +
Access Level: diff --git a/core/new-gui/src/app/dashboard/user/component/user-workflow/user-workflow.component.ts b/core/new-gui/src/app/dashboard/user/component/user-workflow/user-workflow.component.ts index 4968e7b5a69..95f8bb3ad8c 100644 --- a/core/new-gui/src/app/dashboard/user/component/user-workflow/user-workflow.component.ts +++ b/core/new-gui/src/app/dashboard/user/component/user-workflow/user-workflow.component.ts @@ -1,9 +1,4 @@ -import { - AfterViewInit, - Component, - Input, - ViewChild, -} from "@angular/core"; +import { AfterViewInit, Component, Input, ViewChild } from "@angular/core"; import { Router } from "@angular/router"; import { NgbModal } from "@ng-bootstrap/ng-bootstrap"; import { firstValueFrom } from "rxjs"; From fdd365be8d1050a254f6568a4215abc8ee11fed7 Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Thu, 6 Jul 2023 16:33:05 -0700 Subject: [PATCH 3/9] fix format --- .../dashboard/user/file/UserFileAccessResource.scala | 2 +- .../dashboard/user/project/ProjectAccessResource.scala | 8 ++++++-- .../dashboard/user/workflow/WorkflowResource.scala | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala index c46a2489e87..3252f811ed9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala @@ -141,7 +141,7 @@ class UserFileAccessResource { @GET @Path("list/{fid}") def getAccessList( - @PathParam("fid") fid: UInteger, + @PathParam("fid") fid: UInteger ): util.List[AccessEntry] = { context .select( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala index 19e16d279ef..060571a1bf1 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala @@ -46,7 +46,7 @@ class ProjectAccessResource() { @GET @Path("/list/{pid}") def getAccessList( - @PathParam("pid") pid: UInteger, + @PathParam("pid") pid: UInteger ): util.List[AccessEntry] = { context .select( @@ -57,7 +57,11 @@ class ProjectAccessResource() { .from(PROJECT_USER_ACCESS) .join(USER) .on(USER.UID.eq(PROJECT_USER_ACCESS.UID)) - .where(PROJECT_USER_ACCESS.PID.eq(pid).and(PROJECT_USER_ACCESS.UID.notEqual(projectDao.fetchOneByPid(pid).getOwnerId))) + .where( + PROJECT_USER_ACCESS.PID + .eq(pid) + .and(PROJECT_USER_ACCESS.UID.notEqual(projectDao.fetchOneByPid(pid).getOwnerId)) + ) .fetchInto(classOf[AccessEntry]) } diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala index c50a5ca2eb9..32ea92a73af 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala @@ -4,7 +4,11 @@ import edu.uci.ics.texera.web.SqlServer import edu.uci.ics.texera.web.auth.SessionUser import edu.uci.ics.texera.web.model.jooq.generated.Tables._ import edu.uci.ics.texera.web.model.jooq.generated.enums.WorkflowUserAccessPrivilege -import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{WorkflowDao, WorkflowOfUserDao, WorkflowUserAccessDao} +import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{ + WorkflowDao, + WorkflowOfUserDao, + WorkflowUserAccessDao +} import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos._ import edu.uci.ics.texera.web.resource.dashboard.user.workflow.WorkflowResource._ import io.dropwizard.auth.Auth From 6649b6121246ecd186cb331cfe451683f0005503 Mon Sep 17 00:00:00 2001 From: Xinyuan Lin Date: Thu, 6 Jul 2023 17:18:12 -0700 Subject: [PATCH 4/9] fix format --- .../resource/dashboard/user/project/ProjectAccessResource.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala index 060571a1bf1..930b054b2a9 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/project/ProjectAccessResource.scala @@ -1,6 +1,5 @@ package edu.uci.ics.texera.web.resource.dashboard.user.project import edu.uci.ics.texera.web.SqlServer -import edu.uci.ics.texera.web.auth.SessionUser import edu.uci.ics.texera.web.model.common.AccessEntry import edu.uci.ics.texera.web.model.jooq.generated.Tables.{PROJECT_USER_ACCESS, USER} import edu.uci.ics.texera.web.model.jooq.generated.enums.ProjectUserAccessPrivilege @@ -10,7 +9,6 @@ import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{ UserDao } import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.ProjectUserAccess -import io.dropwizard.auth.Auth import org.jooq.DSLContext import org.jooq.types.UInteger import java.util From d9b9ec522a45f41803ed23883701d3f891a8dfdd Mon Sep 17 00:00:00 2001 From: linxinyuan Date: Thu, 6 Jul 2023 22:07:42 -0700 Subject: [PATCH 5/9] update --- .../user/file/UserFileAccessResource.scala | 48 ------------------- .../user/file/UserFileResource.scala | 9 ---- .../workflow/WorkflowAccessResource.scala | 16 +------ .../share-access/share-access.component.html | 2 + .../share-access.component.spec.ts | 3 ++ .../share-access/share-access.component.ts | 10 +++- .../component/user-dashboard-test-fixtures.ts | 6 +-- .../user-file-list-item.component.html | 1 - .../user-file-list-item.component.ts | 1 + .../user-project-list-item.component.html | 3 +- .../user-project-list-item.component.spec.ts | 1 + .../user-project-list-item.component.ts | 5 +- .../user-project/user-project.component.ts | 1 - .../user-workflow-list-item.component.html | 1 - .../user-workflow-list-item.component.ts | 1 + 15 files changed, 24 insertions(+), 84 deletions(-) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala index 3252f811ed9..a9a24d1cba5 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileAccessResource.scala @@ -1,7 +1,6 @@ package edu.uci.ics.texera.web.resource.dashboard.user.file import edu.uci.ics.texera.web.SqlServer -import edu.uci.ics.texera.web.auth.SessionUser import edu.uci.ics.texera.web.model.common.AccessEntry import edu.uci.ics.texera.web.model.jooq.generated.Tables.{ FILE, @@ -18,12 +17,10 @@ import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{ } import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.{FileOfWorkflow, UserFileAccess} import edu.uci.ics.texera.web.resource.dashboard.user.file.UserFileAccessResource.{ - checkWriteAccess, context, fileDao, userDao } -import io.dropwizard.auth.Auth import org.jooq.DSLContext import org.jooq.types.UInteger @@ -73,46 +70,6 @@ object UserFileAccessResource { None } } - - /** - * Identifies whether the given user has read-only access over the given workflow - * @param fid file id - * @param uid user id, works with file id as primary keys in database - */ - def checkReadAccess(fid: UInteger, uid: UInteger): Unit = { - if ( - !(getPrivilege(fid, uid).eq(UserFileAccessPrivilege.READ) || getPrivilege(fid, uid).eq( - UserFileAccessPrivilege.WRITE - )) - ) { - throw new ForbiddenException("No sufficient access privilege.") - } - } - - /** - * Identifies whether the given user has write access over the given workflow - * @param fid file id - * @param uid user id, works with file id as primary keys in database - */ - def checkWriteAccess(fid: UInteger, uid: UInteger): Unit = { - if (!getPrivilege(fid, uid).eq(UserFileAccessPrivilege.WRITE)) { - throw new ForbiddenException("No sufficient access privilege.") - } - } - - /** - * @param fid file id - * @param uid user id, works with file id as primary keys in database - * @return UserFileAccessPrivilege value indicating NONE/READ/WRITE - */ - private def getPrivilege(fid: UInteger, uid: UInteger): UserFileAccessPrivilege = { - context - .select() - .from(USER_FILE_ACCESS) - .where(USER_FILE_ACCESS.FID.eq(fid).and(USER_FILE_ACCESS.UID.eq(uid))) - .fetchOneInto(classOf[UserFileAccess]) - .getPrivilege - } } @Produces(Array(MediaType.APPLICATION_JSON)) @RolesAllowed(Array("REGULAR", "ADMIN")) @@ -174,9 +131,7 @@ class UserFileAccessResource { @PathParam("fid") fid: UInteger, @PathParam("email") email: String, @PathParam("privilege") privilege: String, - @Auth user: SessionUser ): Unit = { - checkWriteAccess(fid, user.getUid) userFileAccessDao.merge( new UserFileAccess( userDao.fetchOneByEmail(email).getUid, @@ -195,13 +150,10 @@ class UserFileAccessResource { */ @DELETE @Path("/revoke/{fid}/{email}") - @RolesAllowed(Array("REGULAR", "ADMIN")) def revokeAccess( @PathParam("fid") fid: UInteger, @PathParam("email") email: String, - @Auth user: SessionUser ): Unit = { - checkWriteAccess(fid, user.getUid) context .delete(USER_FILE_ACCESS) .where( diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileResource.scala index 2eb6f261df2..89d0caffc84 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/file/UserFileResource.scala @@ -7,10 +7,6 @@ import edu.uci.ics.texera.web.model.jooq.generated.Tables._ import edu.uci.ics.texera.web.model.jooq.generated.enums.UserFileAccessPrivilege import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{FileDao, UserFileAccessDao} import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.{File, User, UserFileAccess} -import edu.uci.ics.texera.web.resource.dashboard.user.file.UserFileAccessResource.{ - checkReadAccess, - checkWriteAccess -} import edu.uci.ics.texera.web.resource.dashboard.user.file.UserFileResource.{ DashboardFile, context, @@ -183,7 +179,6 @@ class UserFileResource { @PathParam("fid") fid: UInteger, @Auth user: SessionUser ): Unit = { - checkWriteAccess(fid, user.getUid) Files.deleteIfExists(Paths.get(fileDao.fetchOneByFid(fid).getPath)) fileDao.deleteById(fid) } @@ -194,7 +189,6 @@ class UserFileResource { @PathParam("fid") fid: UInteger, @Auth user: SessionUser ): Response = { - checkReadAccess(fid, user.getUid) Response .ok( new StreamingOutput() { @@ -220,7 +214,6 @@ class UserFileResource { @PathParam("name") name: String, @Auth user: SessionUser ): Unit = { - checkWriteAccess(fid, user.getUid) val validationRes = this.validateFileName(name, user.getUid) if (!validationRes.getLeft) { throw new BadRequestException(validationRes.getRight) @@ -236,9 +229,7 @@ class UserFileResource { def changeFileDescription( @PathParam("fid") fid: UInteger, @PathParam("description") description: String, - @Auth user: SessionUser ): Unit = { - checkWriteAccess(fid, user.getUid) val userFile = fileDao.fetchOneByFid(fid) userFile.setDescription(description) fileDao.update(userFile) diff --git a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala index 2102e4fcbfd..2bd7b7e5c45 100644 --- a/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala +++ b/core/amber/src/main/scala/edu/uci/ics/texera/web/resource/dashboard/user/workflow/WorkflowAccessResource.scala @@ -1,7 +1,6 @@ package edu.uci.ics.texera.web.resource.dashboard.user.workflow import edu.uci.ics.texera.web.SqlServer -import edu.uci.ics.texera.web.auth.SessionUser import edu.uci.ics.texera.web.model.common.AccessEntry import edu.uci.ics.texera.web.model.jooq.generated.Tables.{ PROJECT_USER_ACCESS, @@ -16,14 +15,9 @@ import edu.uci.ics.texera.web.model.jooq.generated.tables.daos.{ WorkflowUserAccessDao } import edu.uci.ics.texera.web.model.jooq.generated.tables.pojos.WorkflowUserAccess -import edu.uci.ics.texera.web.resource.dashboard.user.workflow.WorkflowAccessResource.{ - context, - hasWriteAccess -} -import io.dropwizard.auth.Auth +import edu.uci.ics.texera.web.resource.dashboard.user.workflow.WorkflowAccessResource.context import org.jooq.DSLContext import org.jooq.types.UInteger - import java.util import javax.annotation.security.RolesAllowed import javax.ws.rs._ @@ -143,11 +137,7 @@ class WorkflowAccessResource() { @PathParam("wid") wid: UInteger, @PathParam("email") email: String, @PathParam("privilege") privilege: String, - @Auth user: SessionUser ): Unit = { - if (!hasWriteAccess(wid, user.getUid)) { - throw new ForbiddenException("No sufficient access privilege.") - } workflowUserAccessDao.merge( new WorkflowUserAccess( userDao.fetchOneByEmail(email).getUid, @@ -169,11 +159,7 @@ class WorkflowAccessResource() { def revokeAccess( @PathParam("wid") wid: UInteger, @PathParam("email") email: String, - @Auth user: SessionUser ): Unit = { - if (!hasWriteAccess(wid, user.getUid)) { - throw new ForbiddenException("No sufficient access privilege.") - } context .delete(WORKFLOW_USER_ACCESS) .where( diff --git a/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html b/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html index fd14daa6d61..8c07d011cc0 100644 --- a/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html +++ b/core/new-gui/src/app/dashboard/user/component/share-access/share-access.component.html @@ -60,6 +60,7 @@