From fe3c32a67e6323a5bcae126ff37ef2b25bc8ae31 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 23 Feb 2024 07:08:44 +0800 Subject: [PATCH] core: optimize permission control for group filter in contest_scoreboard --- packages/hydrooj/src/handler/contest.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 42425bcdc..691eb018e 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -328,9 +328,11 @@ export class ContestScoreboardHandler extends ContestDetailBaseHandler { if (!realtime && this.tdoc.lockAt && !this.tdoc.unlocked) { config.lockAt = this.tdoc.lockAt; } - const [, rows, udict, pdict] = await contest.getScoreboard.call(this, domainId, tid, config); - const groups = this.user.hasPerm(PERM.PERM_EDIT_DOMAIN) - ? await user.listGroup(domainId) : []; + const allGroups = this.user.hasPerm(PERM.PERM_EDIT_CONTEST_SELF) || (this.user.own(this.tdoc) && this.user.hasPerm(PERM.PERM_EDIT_CONTEST)) + const [[, rows, udict, pdict], groups] = await Promise.all([ + contest.getScoreboard.call(this, domainId, tid, config), + user.listGroup(domainId, allGroups ? undefined : this.user._id), + ]); // eslint-disable-next-line @typescript-eslint/naming-convention const page_name = this.tdoc.rule === 'homework' ? 'homework_scoreboard'