core: contest: fix permission control

This commit is contained in:
undefined committed 2023-05-19 15:47:52 +08:00
1 parent 8d56e24004
commit 2dbe92344a
2 files changed
+20 -2

No files matched your search

+10 -1
View File
@@ -78,7 +78,16 @@ export class ContestListHandler extends Handler {
if (rule && contest.RULES[rule].hidden) throw new BadRequestError();
const rules = Object.keys(contest.RULES).filter((i) => !contest.RULES[i].hidden);
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 } },
};
const cursor = contest.getMulti(domainId, q);
+10 -1
View File
@@ -25,7 +25,16 @@ class HomeworkMainHandler extends Handler {
async get(domainId: string, page = 1) {
const cursor = contest.getMulti(domainId, {
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 calendar = [];