From: Daniel KutyƂa Date: Thu, 30 Jun 2022 10:41:29 +0000 (+0200) Subject: 19153: Use server configuration X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/5a2f4597393f94b9fa7984f4445d4b599c139f27?ds=sidebyside 19153: Use server configuration Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- diff --git a/cypress/integration/project.spec.js b/cypress/integration/project.spec.js index 0ad8da5622..26b4a15087 100644 --- a/cypress/integration/project.spec.js +++ b/cypress/integration/project.spec.js @@ -338,7 +338,7 @@ describe('Project tests', function() { }); }); - it('should not be able to froze not owned project', () => { + it('should be able to froze not owned project', () => { cy.getAll('@adminProject').then(([adminProject]) => { cy.loginAs(activeUser); @@ -346,11 +346,7 @@ describe('Project tests', function() { cy.get('main').contains(adminProject.name).rightclick(); - cy.get('[data-cy=context-menu]').contains('Freeze').click(); - - cy.get('main').contains(adminProject.name).rightclick(); - - cy.get('[data-cy=context-menu]').contains('Freeze').should('exist'); + cy.get('[data-cy=context-menu]').contains('Freeze').should('not.exist'); }); }); diff --git a/src/common/config.ts b/src/common/config.ts index 2954d70493..574445df09 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -13,6 +13,9 @@ interface WorkbenchConfig { } export interface ClusterConfigJSON { + API: { + UnfreezeProjectRequiresAdmin: boolean + }, ClusterID: string; RemoteClusters: { [key: string]: { @@ -222,6 +225,9 @@ export const mapRemoteHosts = (clusterConfigJSON: ClusterConfigJSON, config: Con }; export const mockClusterConfigJSON = (config: Partial): ClusterConfigJSON => ({ + API: { + UnfreezeProjectRequiresAdmin: false, + }, ClusterID: "", RemoteClusters: {}, Services: { diff --git a/src/models/project.ts b/src/models/project.ts index b490864d8f..04dae4d226 100644 --- a/src/models/project.ts +++ b/src/models/project.ts @@ -6,6 +6,7 @@ import { GroupClass, GroupResource } from "./group"; export interface ProjectResource extends GroupResource { frozenByUuid: null|string; + canManage: boolean; groupClass: GroupClass.PROJECT | GroupClass.FILTER | GroupClass.ROLE; } diff --git a/src/views-components/context-menu/actions/lock-action.tsx b/src/views-components/context-menu/actions/lock-action.tsx index 9e66763091..785de5831f 100644 --- a/src/views-components/context-menu/actions/lock-action.tsx +++ b/src/views-components/context-menu/actions/lock-action.tsx @@ -11,13 +11,15 @@ import { ProjectResource } from "models/project"; import { withRouter, RouteComponentProps } from "react-router"; const mapStateToProps = (state: RootState, props: { onClick: () => {} }) => ({ - isAdmin: state.auth.user!.isAdmin, + isAdmin: !!state.auth.user?.isAdmin, isLocked: !!(state.resources[state.contextMenu.resource!.uuid] as ProjectResource).frozenByUuid, + canManage: (state.resources[state.contextMenu.resource!.uuid] as ProjectResource).canManage, + canUnfreeze: !state.auth.remoteHostsConfig[state.auth.homeCluster]?.clusterConfig?.API?.UnfreezeProjectRequiresAdmin, onClick: props.onClick }); -export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { isLocked: boolean, isAdmin: boolean, onClick: () => void } & RouteComponentProps) => - props.isLocked && !props.isAdmin ? null : +export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { state: RootState, isAdmin: boolean, isLocked: boolean, canManage: boolean, canUnfreeze: boolean, onClick: () => void } & RouteComponentProps) => + (props.canManage && !props.isLocked) || (props.isLocked && props.canManage && (props.canUnfreeze || props.isAdmin)) ? < ListItem button onClick={props.onClick} > @@ -31,4 +33,4 @@ export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { is ? <>Unfreeze project : <>Freeze project} - )); + : null));