fix(result): gate record/save buttons behind RECORD_EXAM_RESULT

Record Result (POST /results) and the detail-modal Save (PUT /results/:id)
had no RequirePermission gate, unlike every other action on this page —
both routes are backend-guarded (RECORD_EXAM_RESULT, or
RECORD_EXAM_RESULT|MODERATE_EXAM_RESULT for the update), the buttons just
never mirrored it client-side.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
mihretue
2026-08-13 17:17:14 +00:00
parent d8b01a2003
commit d98d6a71fe

View File

@@ -314,9 +314,11 @@ export function ResultPage() {
{t('result.review.publish')} {t('result.review.publish')}
</Button> </Button>
</RequirePermission> </RequirePermission>
<RequirePermission anyOf={[LICENSE_PERMISSIONS.RECORD_EXAM_RESULT]} hideOnly>
<Button leftSection={<IconPlus size={15} />} onClick={openPicker} size="sm"> <Button leftSection={<IconPlus size={15} />} onClick={openPicker} size="sm">
{t('result.record')} {t('result.record')}
</Button> </Button>
</RequirePermission>
</Group> </Group>
</Group> </Group>
@@ -504,6 +506,13 @@ export function ResultPage() {
<ModalFooter> <ModalFooter>
<Button variant="default" onClick={handleDetailClose} size="sm">{t('result.close')}</Button> <Button variant="default" onClick={handleDetailClose} size="sm">{t('result.close')}</Button>
<RequirePermission
anyOf={[
LICENSE_PERMISSIONS.RECORD_EXAM_RESULT,
LICENSE_PERMISSIONS.MODERATE_EXAM_RESULT,
]}
hideOnly
>
<Button <Button
onClick={handleDetailSave} onClick={handleDetailSave}
size="sm" size="sm"
@@ -512,6 +521,7 @@ export function ResultPage() {
> >
{t('result.save')} {t('result.save')}
</Button> </Button>
</RequirePermission>
</ModalFooter> </ModalFooter>
</Stack> </Stack>
) : ( ) : (