});
});
- 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);
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');
});
});
}
export interface ClusterConfigJSON {
+ API: {
+ UnfreezeProjectRequiresAdmin: boolean
+ },
ClusterID: string;
RemoteClusters: {
[key: string]: {
};
export const mockClusterConfigJSON = (config: Partial<ClusterConfigJSON>): ClusterConfigJSON => ({
+ API: {
+ UnfreezeProjectRequiresAdmin: false,
+ },
ClusterID: "",
RemoteClusters: {},
Services: {
export interface ProjectResource extends GroupResource {
frozenByUuid: null|string;
+ canManage: boolean;
groupClass: GroupClass.PROJECT | GroupClass.FILTER | GroupClass.ROLE;
}
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} >
? <>Unfreeze project</>
: <>Freeze project</>}
</ListItemText>
- </ListItem >));
+ </ListItem > : null));