Skip to content
页面信息
📝 描述内置常量、权限标志、特权标志、评测状态枚举和 UI 元数据
📥 导入import { BuiltinModel } from 'hydrooj'

BuiltinModel

内置常量、权限标志、特权标志、评测状态枚举和 UI 元数据,从 @hydrooj/common 重新导出并由 Hydro 扩展。


常量

PERM —— 域级权限位标志

将权限名映射到 bigint 值的对象。在域用户角色上用作位掩码。

常量说明
PERM_NONE0n无权限
PERM_VIEW1n << 0查看此域
PERM_EDIT_DOMAIN1n << 1编辑域设置
PERM_MOD_BADGE1n << 2显示 MOD 徽章
PERM_CREATE_PROBLEM1n << 4创建题目
PERM_EDIT_PROBLEM1n << 5编辑任意题目
PERM_EDIT_PROBLEM_SELF1n << 6编辑自己的题目
PERM_VIEW_PROBLEM1n << 7查看题目
PERM_VIEW_PROBLEM_HIDDEN1n << 8查看隐藏题目
PERM_SUBMIT_PROBLEM1n << 9提交题目解答
PERM_READ_PROBLEM_DATA1n << 10读取题目测试数据
PERM_READ_RECORD_CODE1n << 12读取所有记录代码
PERM_REJUDGE_PROBLEM1n << 13重测题目
PERM_REJUDGE1n << 14重测记录
PERM_VIEW_PROBLEM_SOLUTION1n << 15查看题解
PERM_CREATE_PROBLEM_SOLUTION1n << 16创建题解
PERM_VOTE_PROBLEM_SOLUTION1n << 17为题解投票
PERM_EDIT_PROBLEM_SOLUTION1n << 18编辑任意题解
PERM_EDIT_PROBLEM_SOLUTION_SELF1n << 19编辑自己的题解
PERM_DELETE_PROBLEM_SOLUTION1n << 20删除任意题解
PERM_DELETE_PROBLEM_SOLUTION_SELF1n << 21删除自己的题解
PERM_REPLY_PROBLEM_SOLUTION1n << 22回复题解
PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF1n << 24编辑自己的题解回复
PERM_DELETE_PROBLEM_SOLUTION_REPLY1n << 25删除任意题解回复
PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF1n << 26删除自己的题解回复
PERM_VIEW_DISCUSSION1n << 27查看讨论
PERM_CREATE_DISCUSSION1n << 28创建讨论
PERM_HIGHLIGHT_DISCUSSION1n << 29高亮讨论
PERM_EDIT_DISCUSSION1n << 30编辑任意讨论
PERM_EDIT_DISCUSSION_SELF1n << 31编辑自己的讨论
PERM_DELETE_DISCUSSION1n << 32删除任意讨论
PERM_DELETE_DISCUSSION_SELF1n << 33删除自己的讨论
PERM_REPLY_DISCUSSION1n << 34回复讨论
PERM_EDIT_DISCUSSION_REPLY_SELF1n << 36编辑自己的讨论回复
PERM_DELETE_DISCUSSION_REPLY1n << 38删除任意讨论回复
PERM_DELETE_DISCUSSION_REPLY_SELF1n << 39删除自己的讨论回复
PERM_DELETE_DISCUSSION_REPLY_SELF_DISCUSSION1n << 40删除自己讨论中的回复
PERM_VIEW_CONTEST1n << 41查看比赛
PERM_VIEW_CONTEST_SCOREBOARD1n << 42查看比赛排行榜
PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD1n << 43查看隐藏的比赛排行榜
PERM_CREATE_CONTEST1n << 44创建比赛
PERM_ATTEND_CONTEST1n << 45参加比赛
PERM_VIEW_TRAINING1n << 46查看训练计划
PERM_CREATE_TRAINING1n << 47创建训练计划
PERM_EDIT_TRAINING1n << 48编辑任意训练计划
PERM_EDIT_TRAINING_SELF1n << 49编辑自己的训练计划
PERM_EDIT_CONTEST1n << 50编辑任意比赛
PERM_EDIT_CONTEST_SELF1n << 51编辑自己的比赛
PERM_VIEW_HOMEWORK1n << 52查看作业
PERM_VIEW_HOMEWORK_SCOREBOARD1n << 53查看作业排行榜
PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD1n << 54查看隐藏的作业排行榜
PERM_CREATE_HOMEWORK1n << 55创建作业
PERM_ATTEND_HOMEWORK1n << 56认领作业
PERM_EDIT_HOMEWORK1n << 57编辑任意作业
PERM_EDIT_HOMEWORK_SELF1n << 58编辑自己的作业
PERM_VIEW_RANKING1n << 59查看排名
PERM_NEVER1n << 60占位符:永不授予
PERM_PIN_DISCUSSION1n << 61置顶讨论
PERM_ADD_REACTION1n << 62对讨论使用表情回应
PERM_PIN_TRAINING1n << 63置顶训练计划
PERM_LOCK_DISCUSSION1n << 64锁定讨论
PERM_VIEW_PROBLEM_SOLUTION_ACCEPT1n << 65通过后查看题解
PERM_READ_RECORD_CODE_ACCEPT1n << 66通过后查看记录代码
PERM_VIEW_USER_PRIVATE_INFO1n << 67查看域用户私有信息
PERM_VIEW_HIDDEN_CONTEST1n << 68查看所有比赛(含隐藏)
PERM_VIEW_HIDDEN_HOMEWORK1n << 69查看所有作业(含隐藏)
PERM_VIEW_RECORD1n << 70查看其他用户的记录

复合角色(预计算的组合):

常量说明
PERM_ALL-1n所有权限(所有位设为 1)
PERM_BASIC查看权限的并集访客的基础查看权限
PERM_DEFAULT查看 + 创建/自己编辑/提交/投票/回复/参加的并集注册用户的默认权限
PERM_ADMIN-1nPERM_ALL 的别名

PRIV —— 系统级特权位标志

将特权名映射到 number(位移)值的对象。用于站点范围的用户特权。

常量说明
PRIV_NONE0无特权
PRIV_EDIT_SYSTEM1 << 0编辑系统设置(从 PRIV_SET_PRIV 重命名)
PRIV_SET_PERM1 << 1设置域权限
PRIV_USER_PROFILE1 << 2编辑用户资料
PRIV_REGISTER_USER1 << 3注册新用户
PRIV_READ_PROBLEM_DATA1 << 4读取题目测试数据
PRIV_READ_RECORD_CODE1 << 7读取所有记录代码
PRIV_VIEW_HIDDEN_RECORD1 << 8查看隐藏记录
PRIV_JUDGE1 << 9作为评测节点
PRIV_CREATE_DOMAIN1 << 10创建新域
PRIV_VIEW_ALL_DOMAIN1 << 11查看所有域
PRIV_MANAGE_ALL_DOMAIN1 << 12管理所有域
PRIV_REJUDGE1 << 13站点范围重测记录
PRIV_VIEW_USER_SECRET1 << 14查看用户密钥
PRIV_VIEW_JUDGE_STATISTICS1 << 15查看评测统计
PRIV_CREATE_FILE1 << 16在存储中创建文件
PRIV_UNLIMITED_QUOTA1 << 17绕过存储配额限制
PRIV_DELETE_FILE1 << 18从存储中删除文件
PRIV_NEVER1 << 20占位符:永不授予
PRIV_UNLIMITED_ACCESS1 << 22绕过所有访问检查
PRIV_VIEW_SYSTEM_NOTIFICATION1 << 23查看系统通知
PRIV_SEND_MESSAGE1 << 24发送消息
PRIV_MOD_BADGE1 << 25全局显示 MOD 徽章

复合角色

常量说明
PRIV_ALL-1所有特权
PRIV_DEFAULTUSER_PROFILE + CREATE_FILE + SEND_MESSAGE注册用户的默认特权

STATUS —— 评测状态枚举

评测结果状态码枚举。

名称说明
0STATUS_WAITING等待评测
1STATUS_ACCEPTED答案正确
2STATUS_WRONG_ANSWER答案错误
3STATUS_TIME_LIMIT_EXCEEDED超过时间限制
4STATUS_MEMORY_LIMIT_EXCEEDED超过内存限制
5STATUS_OUTPUT_LIMIT_EXCEEDED超过输出限制
6STATUS_RUNTIME_ERROR运行时错误
7STATUS_COMPILE_ERROR编译错误
8STATUS_SYSTEM_ERROR系统错误
9STATUS_CANCELED提交已取消
10STATUS_ETC未知错误
11STATUS_HACKED解法被 Hack
20STATUS_JUDGING正在评测
21STATUS_COMPILING正在编译
22STATUS_FETCHED已被评测机获取
30STATUS_IGNORED提交被忽略
31STATUS_FORMAT_ERROR格式错误
32STATUS_HACK_SUCCESSFULHack 成功
33STATUS_HACK_UNSUCCESSFULHack 失败

状态查找映射

导出类型说明
STATUS_TEXTSRecord<STATUS, string>每个状态码的完整显示名(如 "Wrong Answer"
STATUS_SHORT_TEXTSPartial<Record<STATUS, string>>每个状态码的缩写(如 "WA""TLE"
STATUS_CODESRecord<STATUS, string>语义类别:"pending""pass""fail""progress""ignored"
NORMAL_STATUSSTATUS[]最终结果状态(AC 到 CE)—— 不包括进行中和特殊状态

用户性别常量

导出类型说明
USER_GENDER_MALE0男性常量
USER_GENDER_FEMALE1女性常量
USER_GENDER_OTHER2其他性别常量
USER_GENDERSnumber[]所有性别值的数组 [0, 1, 2]
USER_GENDER_RANGERecord<number, string>显示标签:"Boy ♂""Girl ♀""Other"
USER_GENDER_ICONSRecord<number, string>图标符号:"♂""♀""?"

PERMS

所有域级权限描述符的数组,每个包含 { family, key, desc }。按 family 分组:

Family权限
perm_generalPERM_VIEW, PERM_VIEW_USER_PRIVATE_INFO, PERM_EDIT_DOMAIN, PERM_MOD_BADGE
perm_problemPERM_CREATE_PROBLEM, PERM_EDIT_PROBLEM, PERM_EDIT_PROBLEM_SELF, PERM_VIEW_PROBLEM, PERM_VIEW_PROBLEM_HIDDEN, PERM_SUBMIT_PROBLEM, PERM_READ_PROBLEM_DATA
perm_recordPERM_VIEW_RECORD, PERM_READ_RECORD_CODE, PERM_READ_RECORD_CODE_ACCEPT, PERM_REJUDGE_PROBLEM, PERM_REJUDGE
perm_problem_solution题解 CRUD、投票和回复的 12 个权限
perm_discussion讨论 CRUD、置顶、高亮、锁定、回应和回复的 15 个权限
perm_contestPERM_VIEW_CONTEST, PERM_VIEW_CONTEST_SCOREBOARD, PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD, PERM_CREATE_CONTEST, PERM_ATTEND_CONTEST, PERM_EDIT_CONTEST, PERM_EDIT_CONTEST_SELF, PERM_VIEW_HIDDEN_CONTEST
perm_homeworkPERM_VIEW_HOMEWORK, PERM_VIEW_HOMEWORK_SCOREBOARD, PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD, PERM_CREATE_HOMEWORK, PERM_ATTEND_HOMEWORK, PERM_EDIT_HOMEWORK, PERM_EDIT_HOMEWORK_SELF, PERM_VIEW_HIDDEN_HOMEWORK
perm_trainingPERM_VIEW_TRAINING, PERM_CREATE_TRAINING, PERM_EDIT_TRAINING, PERM_PIN_TRAINING, PERM_EDIT_TRAINING_SELF
perm_rankingPERM_VIEW_RANKING

PERMS_BY_FAMILY

Record<string, PermissionDescriptor[]> —— 按自动生成的 family 索引分组的 PERMS。用于按类别渲染权限设置 UI。

LEVELS

number[] —— [100, 90, 70, 55, 40, 30, 20, 10, 5, 2, 1] —— 11 个用户等级的百分比阈值。排名百分位低于阈值的用户获得该等级。

BUILTIN_ROLES

预定义的角色权限集:

角色说明
guestPERM.PERM_BASIC访客(仅查看)权限
defaultPERM.PERM_DEFAULT注册用户默认权限
rootPERM.PERM_ALL完整管理员权限

DEFAULT_NODES

默认讨论节点分类及其子节点(中文标签)。用于为新域填充初始讨论板结构。

CATEGORIES

题目类别分类 —— 一个 Record<string, string[]>,将顶层算法类别映射到子类别标签。用于题目分类。


方法

工具与工厂

getScoreColor(score: number | string): string

返回数值分数(0–100)对应的十六进制颜色字符串(#rrggbb),以 10 分为一档映射红到绿的渐变。非有限值返回 #000000

Permission(family: string, key: bigint, desc: string): PermissionDescriptor

工厂函数,创建权限描述符对象 { family, key, desc }。内部用于构建 PERMS 数组。

参数类型默认值说明
familystring权限所属分类
keybigint权限常量值(如 PERM.PERM_VIEW
descstring权限描述
返回值PermissionDescriptor{ family, key, desc }

备注

  • PERM 标志是 bigint(域作用域);PRIV 标志是 number(系统作用域)。两者都用按位 OR(|)组合,按位 AND(&)检查。
  • PERM_VIEW_DISPLAYNAME 已废弃 —— 请使用 PERM_VIEW_USER_PRIVATE_INFO(相同位位置 1n << 67)。
  • PRIV_EDIT_SYSTEMPRIV_SET_PRIV 重命名而来;PRIV_JUDGE 从更早的名称重命名而来。
  • 模块在加载时注册自身到 global.Hydro.model.builtin
  • 通过 export * from '@hydrooj/common/permission'export * from '@hydrooj/common/status' 重新导出。