fix(Minor M1): 角色判断改回白名单
isAdminRole 之前写成 `adminType !== "Regular User"`。当前四种角色下与旧后端等价, 但将来新增任何角色(助教、家长……)都会默认拿到管理员权限,包括 canViewSubmission 里的「看所有人代码」——加角色的人多半想不到要回来改这里。 改成显式列举,对齐 account/models.py:65-73。实测四种已知角色行为不变, 虚构的新角色「助教」现在默认不是管理员。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -64,15 +64,24 @@ export function queryInteger(
|
||||
return parsed
|
||||
}
|
||||
|
||||
// 角色判断一律用白名单,对齐旧后端 `account/models.py:65-73` 的 is_admin_role /
|
||||
// is_teacher_or_above 显式列举写法。
|
||||
//
|
||||
// 不要写成黑名单(`adminType !== "Regular User"`):当前四种角色下两者等价,但将来新增
|
||||
// 任何角色(助教、家长……)都会**默认拿到管理员权限**,包括 canViewSubmission 里的
|
||||
//「看所有人代码」。加角色的人多半想不到要回来改这里,白名单则会默认拒绝。
|
||||
const ADMIN_ROLES = ["Student Admin", "Teacher Admin", "Super Admin"]
|
||||
const TEACHER_ROLES = ["Teacher Admin", "Super Admin"]
|
||||
|
||||
// 注意:不要再加 isRegularUser(user) 这类「是普通用户才受限」的判断 ——
|
||||
// 匿名用户 user 为 null 时它返回 false,守卫会整体短路,匿名的权限反而大于登录学生。
|
||||
// 需要「非管理员即受限」时一律用 !isAdminRole(user)。
|
||||
export function isAdminRole(user: AuthUser | null | undefined) {
|
||||
return Boolean(user && user.adminType !== "Regular User")
|
||||
return Boolean(user && ADMIN_ROLES.includes(user.adminType))
|
||||
}
|
||||
|
||||
export function isTeacherOrAbove(user: AuthUser | null | undefined) {
|
||||
return user?.adminType === "Teacher Admin" || user?.adminType === "Super Admin"
|
||||
return Boolean(user && TEACHER_ROLES.includes(user.adminType))
|
||||
}
|
||||
|
||||
export function isSuperAdmin(user: AuthUser | null | undefined) {
|
||||
|
||||
Reference in New Issue
Block a user