core: contest: fix permission control

pull/568/merge
undefined 1 year ago
parent 8d56e24004
commit 2dbe92344a
No known key found for this signature in database

@ -78,7 +78,16 @@ export class ContestListHandler extends Handler {
if (rule && contest.RULES[rule].hidden) throw new BadRequestError(); if (rule && contest.RULES[rule].hidden) throw new BadRequestError();
const rules = Object.keys(contest.RULES).filter((i) => !contest.RULES[i].hidden); const rules = Object.keys(contest.RULES).filter((i) => !contest.RULES[i].hidden);
const q = { const q = {
...this.user.hasPerm(PERM.PERM_VIEW_HIDDEN_CONTEST) ? {} : { $or: [{ assign: { $in: this.user.group } }, { assign: { $size: 0 } }] }, ...this.user.hasPerm(PERM.PERM_VIEW_HIDDEN_CONTEST)
? {}
: {
$or: [
{ maintainer: this.user._id },
{ owner: this.user._id },
{ assign: { $in: this.user.group } },
{ assign: { $size: 0 } },
],
},
...rule ? { rule } : { rule: { $in: rules } }, ...rule ? { rule } : { rule: { $in: rules } },
}; };
const cursor = contest.getMulti(domainId, q); const cursor = contest.getMulti(domainId, q);

@ -25,7 +25,16 @@ class HomeworkMainHandler extends Handler {
async get(domainId: string, page = 1) { async get(domainId: string, page = 1) {
const cursor = contest.getMulti(domainId, { const cursor = contest.getMulti(domainId, {
rule: 'homework', rule: 'homework',
...this.user.hasPerm(PERM.PERM_VIEW_HIDDEN_HOMEWORK) ? {} : { $or: [{ assign: { $in: this.user.group } }, { assign: { $size: 0 } }] }, ...this.user.hasPerm(PERM.PERM_VIEW_HIDDEN_HOMEWORK)
? {}
: {
$or: [
{ maintainer: this.user._id },
{ owner: this.user._id },
{ assign: { $in: this.user.group } },
{ assign: { $size: 0 } },
],
},
}); });
const [tdocs, tpcount] = await paginate<Tdoc>(cursor, page, system.get('pagination.contest')); const [tdocs, tpcount] = await paginate<Tdoc>(cursor, page, system.get('pagination.contest'));
const calendar = []; const calendar = [];

Loading…
Cancel
Save