update
Some checks failed
Deploy / deploy (push) Has been cancelled

This commit is contained in:
2025-09-25 20:12:24 +08:00
parent 59a81c7601
commit f7b8ef8978
6 changed files with 66 additions and 102 deletions

View File

@@ -119,6 +119,7 @@ async function getProblemDetail() {
toggleReady(true)
return
}
try {
const { data } = await getProblem(props.problemID)
toggleReady(true)
problem.value.id = data.id
@@ -162,6 +163,10 @@ async function getProblemDetail() {
})
// 标签
tags.value.select = data.tags
} catch (error) {
message.error("获取题目失败")
router.push({ name: "admin problem list" })
}
}
async function getTagList() {

View File

@@ -2,7 +2,6 @@
import { NButton, NTag } from "naive-ui"
import { parseTime } from "~/utils/functions"
import { Server } from "~/utils/types"
import { usePermissions } from "~/utils/permissions"
import {
deleteJudgeServer,
editWebsite,
@@ -18,14 +17,6 @@ interface Testcase {
}
const message = useMessage()
const router = useRouter()
const { canManageSystemConfig } = usePermissions()
// 权限检查只有super_admin可以管理系统配置
if (!canManageSystemConfig.value) {
message.error("您没有权限访问此页面")
router.push("/admin")
}
const testcaseColumns: DataTableColumn<Testcase>[] = [
{ title: "测试用例 ID", key: "id" },

View File

@@ -3,7 +3,6 @@ import { NButton } from "naive-ui"
import { getRank } from "oj/api"
import Pagination from "~/shared/components/Pagination.vue"
import { useUserStore } from "~/shared/store/user"
import { usePermissions } from "~/utils/permissions"
import { getACRate } from "~/utils/functions"
import { Rank } from "~/utils/types"
import { getBaseInfo, randomUser10 } from "../api"
@@ -14,14 +13,6 @@ const contestCount = ref(0)
const userStore = useUserStore()
const router = useRouter()
const message = useMessage()
const { isSuperAdmin } = usePermissions()
// 权限检查只有super_admin可以访问管理员首页
if (!isSuperAdmin.value) {
message.error("您没有权限访问此页面")
router.push("/admin/problem/list")
}
const showModal = ref(false)
const luckyGuy = ref("")
const data = ref<Rank[]>([])

View File

@@ -3,7 +3,6 @@ import { DataTableRowKey, SelectOption } from "naive-ui"
import Pagination from "~/shared/components/Pagination.vue"
import { parseTime, filterEmptyValue } from "~/utils/functions"
import { User } from "~/utils/types"
import { usePermissions } from "~/utils/permissions"
import {
deleteUsers,
editUser,
@@ -18,13 +17,6 @@ import { USER_TYPE } from "~/utils/constants"
const message = useMessage()
const router = useRouter()
const route = useRoute()
const { canManageUsers } = usePermissions()
// 权限检查只有super_admin可以管理用户
if (!canManageUsers.value) {
message.error("您没有权限访问此页面")
router.push("/admin")
}
const total = ref(0)
const users = ref<User[]>([])

View File

@@ -25,6 +25,7 @@ import App from "./App.vue"
import { admins, ojs } from "./routes"
import { toggleLogin } from "./shared/composables/modal"
import { useUserStore } from "./shared/store/user"
const router = createRouter({
history: createWebHistory(),
@@ -41,23 +42,20 @@ router.beforeEach(async (to, from, next) => {
}
}
// 检查管理员权限
if (to.matched.some((record) =>
record.meta.requiresAdmin ||
record.meta.requiresSuperAdmin ||
record.meta.requiresProblemPermission
)) {
// 检查权限
if (
to.matched.some(
(record) =>
record.meta.requiresSuperAdmin || record.meta.requiresProblemPermission,
)
) {
if (!storage.get(STORAGE_KEY.AUTHED)) {
toggleLogin(true)
next("/")
return
}
// 动态导入用户store来检查权限
const { useUserStore } = await import("./shared/store/user")
const userStore = useUserStore()
// 确保用户信息已加载
if (!userStore.user) {
try {
await userStore.getMyProfile()
@@ -66,26 +64,15 @@ router.beforeEach(async (to, from, next) => {
return
}
}
// 检查super admin权限
if (to.matched.some((record) => record.meta.requiresSuperAdmin)) {
if (!userStore.isSuperAdmin) {
next("/admin")
next("/")
return
}
}
// 检查题目权限
else if (to.matched.some((record) => record.meta.requiresProblemPermission)) {
} else if (
to.matched.some((record) => record.meta.requiresProblemPermission)
) {
if (!userStore.hasProblemPermission) {
next("/admin")
return
}
}
// 检查基本admin权限
else if (to.matched.some((record) => record.meta.requiresAdmin)) {
if (!userStore.isAdminRole) {
next("/")
return
}

View File

@@ -107,9 +107,8 @@ export const admins: RouteRecordRaw = {
path: "",
name: "admin home",
component: () => import("~/admin/setting/home.vue"),
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
// 只有super_admin可以访问的路由
{
path: "config",
name: "admin config",
@@ -148,46 +147,45 @@ export const admins: RouteRecordRaw = {
props: true,
meta: { requiresProblemPermission: true },
},
// admin和super_admin都可以访问的路由
{
path: "contest/list",
name: "admin contest list",
component: () => import("admin/contest/list.vue"),
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
{
path: "contest/create",
name: "admin contest create",
component: () => import("admin/contest/detail.vue"),
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
{
path: "contest/edit/:contestID",
name: "admin contest edit",
component: () => import("admin/contest/detail.vue"),
props: true,
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/list",
name: "admin contest problem list",
component: () => import("admin/problem/list.vue"),
props: true,
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/create",
name: "admin contest problem create",
component: () => import("admin/problem/detail.vue"),
props: true,
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/edit/:problemID",
name: "admin contest problem edit",
component: () => import("admin/problem/detail.vue"),
props: true,
meta: { requiresAdmin: true },
meta: { requiresSuperAdmin: true },
},
// 只有super_admin可以访问的路由
{