allow disabling the permission check for the Create New Instance page to improve performance.

This commit is contained in:
Dan 2022-11-25 15:23:08 -05:00
parent ab929fcaa9
commit bef4add43b
4 changed files with 35 additions and 15 deletions

View File

@ -68,12 +68,14 @@ type OwnProps = {
processModel: ProcessModel; processModel: ProcessModel;
onSuccessCallback: Function; onSuccessCallback: Function;
className?: string; className?: string;
checkPermissions?: boolean;
}; };
export default function ProcessInstanceRun({ export default function ProcessInstanceRun({
processModel, processModel,
onSuccessCallback, onSuccessCallback,
className, className,
checkPermissions = true,
}: OwnProps) { }: OwnProps) {
const navigate = useNavigate(); const navigate = useNavigate();
const setErrorMessage = (useContext as any)(ErrorContext)[1]; const setErrorMessage = (useContext as any)(ErrorContext)[1];
@ -82,9 +84,14 @@ export default function ProcessInstanceRun({
); );
const processInstanceActionPath = `/v1.0/process-models/${modifiedProcessModelId}/process-instances`; const processInstanceActionPath = `/v1.0/process-models/${modifiedProcessModelId}/process-instances`;
const permissionRequestData: PermissionsToCheck = { let permissionRequestData: PermissionsToCheck = {
[processInstanceActionPath]: ['POST'], [processInstanceActionPath]: ['POST'],
}; };
if (!checkPermissions) {
permissionRequestData = {};
}
const { ability } = usePermissionFetcher(permissionRequestData); const { ability } = usePermissionFetcher(permissionRequestData);
const onProcessInstanceRun = (processInstance: any) => { const onProcessInstanceRun = (processInstance: any) => {
@ -115,12 +122,18 @@ export default function ProcessInstanceRun({
httpMethod: 'POST', httpMethod: 'POST',
}); });
}; };
if (checkPermissions) {
return (
<Can I="POST" a={processInstanceActionPath} ability={ability}>
<Button onClick={processInstanceCreateAndRun} className={className}>
Start
</Button>
</Can>
);
}
return ( return (
<Can I="POST" a={processInstanceActionPath} ability={ability}> <Button onClick={processInstanceCreateAndRun} className={className}>
<Button onClick={processInstanceCreateAndRun} className={className}> Start
Start </Button>
</Button>
</Can>
); );
} }

View File

@ -15,11 +15,13 @@ import ProcessInstanceRun from './ProcessInstanceRun';
type OwnProps = { type OwnProps = {
headerElement?: ReactElement; headerElement?: ReactElement;
processGroup?: ProcessGroup; processGroup?: ProcessGroup;
checkPermissions?: boolean;
}; };
export default function ProcessModelListTiles({ export default function ProcessModelListTiles({
headerElement, headerElement,
processGroup, processGroup,
checkPermissions = true,
}: OwnProps) { }: OwnProps) {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const [processModels, setProcessModels] = useState<ProcessModel[] | null>( const [processModels, setProcessModels] = useState<ProcessModel[] | null>(
@ -94,6 +96,7 @@ export default function ProcessModelListTiles({
processModel={row} processModel={row}
onSuccessCallback={setProcessInstance} onSuccessCallback={setProcessInstance}
className="tile-pin-bottom" className="tile-pin-bottom"
checkPermissions={checkPermissions}
/> />
</div> </div>
</Tile> </Tile>

View File

@ -37,13 +37,14 @@ export const usePermissionFetcher = (
ability.update(rules); ability.update(rules);
setPermissionsLoaded(true); setPermissionsLoaded(true);
}; };
if (Object.keys(permissionsToCheck).length !== 0) {
HttpService.makeCallToBackend({ HttpService.makeCallToBackend({
path: `/permissions-check`, path: `/permissions-check`,
httpMethod: 'POST', httpMethod: 'POST',
successCallback: processPermissionResult, successCallback: processPermissionResult,
postBody: { requests_to_check: permissionsToCheck }, postBody: { requests_to_check: permissionsToCheck },
}); });
}
}); });
return { ability, permissionsLoaded }; return { ability, permissionsLoaded };

View File

@ -2,6 +2,9 @@ import ProcessModelListTiles from '../components/ProcessModelListTiles';
export default function CreateNewInstance() { export default function CreateNewInstance() {
return ( return (
<ProcessModelListTiles headerElement={<h2>Processes I can start</h2>} /> <ProcessModelListTiles
headerElement={<h2>Processes I can start</h2>}
checkPermissions={false}
/>
); );
} }