|
|
|
const perm = {
|
|
|
|
PERM_MANAGE: '#',
|
|
|
|
PERM_LOGGEDIN: '0',
|
|
|
|
PERM_MOD_BADGE: '3',
|
|
|
|
PERM_CREATE_PROBLEM: '5',
|
|
|
|
PERM_EDIT_PROBLEM: '6',
|
|
|
|
PERM_VIEW_PROBLEM: '7',
|
|
|
|
PERM_VIEW_PROBLEM_HIDDEN: '8',
|
|
|
|
PERM_SUBMIT_PROBLEM: '9',
|
|
|
|
PERM_READ_PROBLEM_DATA: 'A',
|
|
|
|
PERM_READ_RECORD_CODE: 'B',
|
|
|
|
PERM_REJUDGE_PROBLEM: 'C',
|
|
|
|
PERM_REJUDGE: 'D',
|
|
|
|
PERM_VIEW_PROBLEM_SOLUTION: 'E',
|
|
|
|
PERM_CREATE_PROBLEM_SOLUTION: 'F',
|
|
|
|
PERM_VOTE_PROBLEM_SOLUTION: 'G',
|
|
|
|
PERM_EDIT_PROBLEM_SOLUTION: 'H',
|
|
|
|
PERM_DELETE_PROBLEM_SOLUTION: 'I',
|
|
|
|
PERM_REPLY_PROBLEM_SOLUTION: 'J',
|
|
|
|
PERM_EDIT_PROBLEM_SOLUTION_REPLY: 'K',
|
|
|
|
PERM_DELETE_PROBLEM_SOLUTION_REPLY: 'L',
|
|
|
|
PERM_VIEW_DISCUSSION: 'M',
|
|
|
|
PERM_CREATE_DISCUSSION: 'N',
|
|
|
|
PERM_HIGHLIGHT_DISCUSSION: 'O',
|
|
|
|
PERM_EDIT_DISCUSSION: 'P',
|
|
|
|
PERM_DELETE_DISCUSSION: 'Q',
|
|
|
|
PERM_REPLY_DISCUSSION: 'R',
|
|
|
|
PERM_EDIT_DISCUSSION_REPLY: 'S',
|
|
|
|
PERM_DELETE_DISCUSSION_REPLY: 'T',
|
|
|
|
PERM_VIEW_CONTEST: 'U',
|
|
|
|
PERM_VIEW_CONTEST_SCOREBOARD: 'V',
|
|
|
|
PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD: 'W',
|
|
|
|
PERM_CREATE_CONTEST: 'X',
|
|
|
|
PERM_ATTEND_CONTEST: 'Y',
|
|
|
|
PERM_EDIT_CONTEST: 'Z',
|
|
|
|
PERM_VIEW_TRAINING: 'a',
|
|
|
|
PERM_CREATE_TRAINING: 'b',
|
|
|
|
PERM_EDIT_TRAINING: 'c',
|
|
|
|
PERM_VIEW_HOMEWORK: 'e',
|
|
|
|
PERM_CREATE_HOMEWORK: 'f',
|
|
|
|
PERM_EDIT_HOMEWORK: 'g',
|
|
|
|
PERM_ATTEND_HOMEWORK: 'h',
|
|
|
|
PERM_VIEW_HOMEWORK_SCOREBOARD: 'i',
|
|
|
|
PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD: 'j',
|
|
|
|
PERM_JUDGE: 'd',
|
|
|
|
};
|
|
|
|
|
|
|
|
let PERM_ALL = '';
|
|
|
|
for (const p in perm) PERM_ALL += perm[p];
|
|
|
|
perm.PERM_ALL = PERM_ALL;
|
|
|
|
|
|
|
|
const Permission = (family, key, desc) => ({ family, key, desc });
|
|
|
|
|
|
|
|
const PERMS = [
|
|
|
|
Permission('perm_general', perm.PERM_MANAGE, 'Manage the system'),
|
|
|
|
Permission('perm_general', perm.PERM_MOD_BADGE, 'Show MOD badge'),
|
|
|
|
Permission('perm_problem', perm.PERM_CREATE_PROBLEM, 'Create problems'),
|
|
|
|
Permission('perm_problem', perm.PERM_EDIT_PROBLEM, 'Edit problems'),
|
|
|
|
Permission('perm_problem', perm.PERM_VIEW_PROBLEM, 'View problems'),
|
|
|
|
Permission('perm_problem', perm.PERM_VIEW_PROBLEM_HIDDEN, 'View hidden problems'),
|
|
|
|
Permission('perm_problem', perm.PERM_SUBMIT_PROBLEM, 'Submit problem'),
|
|
|
|
Permission('perm_problem', perm.PERM_READ_PROBLEM_DATA, 'Read data of problem'),
|
|
|
|
Permission('perm_record', perm.PERM_READ_RECORD_CODE, 'Read record codes'),
|
|
|
|
Permission('perm_record', perm.PERM_REJUDGE_PROBLEM, 'Rejudge problems'),
|
|
|
|
Permission('perm_record', perm.PERM_REJUDGE, 'Rejudge records'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_VIEW_PROBLEM_SOLUTION, 'View problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_CREATE_PROBLEM_SOLUTION, 'Create problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_VOTE_PROBLEM_SOLUTION, 'Vote problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_EDIT_PROBLEM_SOLUTION, 'Edit problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_DELETE_PROBLEM_SOLUTION, 'Delete problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_REPLY_PROBLEM_SOLUTION, 'Reply problem solutions'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_EDIT_PROBLEM_SOLUTION_REPLY, 'Edit problem solution replies'),
|
|
|
|
Permission('perm_problem_solution', perm.PERM_DELETE_PROBLEM_SOLUTION_REPLY, 'Delete problem solution replies'),
|
|
|
|
Permission('perm_discussion', perm.PERM_VIEW_DISCUSSION, 'View discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_CREATE_DISCUSSION, 'Create discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_HIGHLIGHT_DISCUSSION, 'Highlight discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_EDIT_DISCUSSION, 'Edit discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_DELETE_DISCUSSION, 'Delete discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_REPLY_DISCUSSION, 'Reply discussions'),
|
|
|
|
Permission('perm_discussion', perm.PERM_EDIT_DISCUSSION_REPLY, 'Edit discussion replies'),
|
|
|
|
Permission('perm_discussion', perm.PERM_DELETE_DISCUSSION_REPLY, 'Delete discussion replies'),
|
|
|
|
Permission('perm_contest', perm.PERM_VIEW_CONTEST, 'View contests'),
|
|
|
|
Permission('perm_contest', perm.PERM_VIEW_CONTEST_SCOREBOARD, 'View contest scoreboard'),
|
|
|
|
Permission('perm_contest', perm.PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD, 'View hidden contest submission status and scoreboard'),
|
|
|
|
Permission('perm_contest', perm.PERM_CREATE_CONTEST, 'Create contests'),
|
|
|
|
Permission('perm_contest', perm.PERM_ATTEND_CONTEST, 'Attend contests'),
|
|
|
|
Permission('perm_contest', perm.PERM_EDIT_CONTEST, 'Edit any contests'),
|
|
|
|
Permission('perm_homework', perm.PERM_VIEW_HOMEWORK, 'View homework'),
|
|
|
|
Permission('perm_homework', perm.PERM_VIEW_HOMEWORK_SCOREBOARD, 'View homework scoreboard'),
|
|
|
|
Permission('perm_homework', perm.PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD, 'View hidden homework submission status and scoreboard'),
|
|
|
|
Permission('perm_homework', perm.PERM_CREATE_HOMEWORK, 'Create homework'),
|
|
|
|
Permission('perm_homework', perm.PERM_ATTEND_HOMEWORK, 'Claim homework'),
|
|
|
|
Permission('perm_homework', perm.PERM_EDIT_HOMEWORK, 'Edit any homework'),
|
|
|
|
];
|
|
|
|
|
|
|
|
const PERMS_BY_FAMILY = {};
|
|
|
|
for (const p of PERMS) {
|
|
|
|
if (!PERMS_BY_FAMILY[p.family]) PERMS_BY_FAMILY[p.family] = [p];
|
|
|
|
else PERMS_BY_FAMILY[p.family].push(p);
|
|
|
|
}
|
|
|
|
perm.PERMS_BY_FAMILY = PERMS_BY_FAMILY;
|
|
|
|
|
|
|
|
perm.PERM_BASIC = perm.PERM_VIEW_PROBLEM
|
|
|
|
+ perm.PERM_VIEW_PROBLEM_SOLUTION
|
|
|
|
+ perm.PERM_VIEW_DISCUSSION
|
|
|
|
+ perm.PERM_VIEW_TRAINING
|
|
|
|
+ perm.PERM_VIEW_CONTEST
|
|
|
|
+ perm.PERM_VIEW_CONTEST_SCOREBOARD
|
|
|
|
+ perm.PERM_VIEW_HOMEWORK
|
|
|
|
+ perm.PERM_VIEW_HOMEWORK_SCOREBOARD;
|
|
|
|
|
|
|
|
perm.PERM_DEFAULT = perm.PERM_BASIC
|
|
|
|
+ perm.PERM_SUBMIT_PROBLEM
|
|
|
|
+ perm.PERM_CREATE_PROBLEM_SOLUTION
|
|
|
|
+ perm.PERM_VOTE_PROBLEM_SOLUTION
|
|
|
|
+ perm.PERM_REPLY_PROBLEM_SOLUTION
|
|
|
|
+ perm.PERM_CREATE_DISCUSSION
|
|
|
|
+ perm.PERM_REPLY_DISCUSSION
|
|
|
|
+ perm.PERM_ATTEND_CONTEST
|
|
|
|
+ perm.PERM_CREATE_TRAINING
|
|
|
|
+ perm.PERM_LOGGEDIN
|
|
|
|
+ perm.PERM_ATTEND_HOMEWORK;
|
|
|
|
|
|
|
|
perm.PERM_ADMIN = perm.PERM_ALL;
|
|
|
|
|
|
|
|
perm.PRIV_NONE = 0;
|
|
|
|
perm.PRIV_ADMIN = 1;
|
|
|
|
|
|
|
|
global.Hydro.permission = module.exports = perm;
|