Skip to content

Commit b01002e

Browse files
committed
feat: no permission route
1 parent 65959c8 commit b01002e

File tree

9 files changed

+116
-27
lines changed

9 files changed

+116
-27
lines changed

ui/src/layout/layout-header/top-menu/index.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,28 @@
55
v-hasPermission="menu.meta?.permission"
66
v-for="(menu, index) in topMenuList"
77
:key="index"
8-
v-show="!menu.hidden"
98
>
109
</MenuItem>
1110
</div>
1211
</template>
1312
<script setup lang="ts">
1413
import { computed } from 'vue'
1514
import { getChildRouteListByPathAndName } from '@/router/index'
15+
import { hasPermission, set_next_route } from '@/utils/permission/index'
1616
import MenuItem from './MenuItem.vue'
1717
1818
const topMenuList = computed(() => {
19-
return getChildRouteListByPathAndName('/', 'home')
19+
const menu = getChildRouteListByPathAndName('/', 'home').filter(
20+
(item) =>
21+
item.meta?.menu &&
22+
(item.meta.permission ? hasPermission(item.meta.permission as any, 'OR') : true),
23+
)
24+
menu.sort(
25+
(a, b) =>
26+
(a.meta ? (a.meta.order ? (a.meta.order as number) : 1) : 1) -
27+
(b.meta ? (b.meta.order ? (b.meta.order as number) : 1) : 1),
28+
)
29+
return menu
2030
})
2131
</script>
2232
<style lang="scss" scope>

ui/src/router/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ router.beforeEach(
4848
next()
4949
} else {
5050
// 如果没有权限则直接取404页面
51-
next('404')
51+
next({ path: '/no-permission' })
5252
}
5353
},
5454
)

ui/src/router/modules/application.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
1-
1+
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
2+
import { get_next_route } from '@/utils/permission'
23
const applicationRouter = {
34
path: '/application',
45
name: 'application',
5-
meta: { title: 'views.application.title' },
6+
meta: {
7+
title: 'views.application.title',
8+
menu: true,
9+
permission: [
10+
RoleConst.ADMIN,
11+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
12+
PermissionConst.APPLICATION_READ.getWorkspacePermissionWorkspaceManageRole,
13+
PermissionConst.APPLICATION_READ.getWorkspacePermission,
14+
],
15+
order: 1,
16+
},
617
redirect: '/application',
718
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
819
children: [

ui/src/router/modules/document.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import role from '@/api/system/role'
22
import { ChatUserResourceEnum } from '@/enums/workspaceChatUser'
3-
import {get_next_route} from "@/utils/permission"
3+
import { get_next_route } from '@/utils/permission'
44
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
55
const DocumentRouter = {
66
path: '/knowledge/:id/:folderId',
@@ -22,13 +22,13 @@ const DocumentRouter = {
2222
permission: [
2323
RoleConst.ADMIN,
2424
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
25-
() => {
25+
() => {
2626
const to: any = get_next_route()
2727
return PermissionConst.KNOWLEDGE_DOCUMENT_READ.getKnowledgeWorkspaceResourcePermission(
2828
to ? to.params.id : '',
2929
)
3030
},
31-
PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole,
31+
PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole,
3232
],
3333
},
3434
component: () => import('@/views/document/index.vue'),
@@ -52,7 +52,7 @@ const DocumentRouter = {
5252
to ? to.params.id : '',
5353
)
5454
},
55-
PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermissionWorkspaceManageRole
55+
PermissionConst.KNOWLEDGE_PROBLEM_READ.getWorkspacePermissionWorkspaceManageRole,
5656
],
5757
},
5858
component: () => import('@/views/problem/index.vue'),
@@ -89,7 +89,7 @@ const DocumentRouter = {
8989
to ? to.params.id : '',
9090
)
9191
},
92-
PermissionConst.WORKSPACE_CHAT_USER_READ.getWorkspacePermissionWorkspaceManageRole
92+
PermissionConst.WORKSPACE_CHAT_USER_READ.getWorkspacePermissionWorkspaceManageRole,
9393
],
9494
},
9595
component: () => import('@/views/chat-user/index.vue'),
@@ -113,9 +113,8 @@ const DocumentRouter = {
113113
to ? to.params.id : '',
114114
)
115115
},
116-
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole
117-
]
118-
116+
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole,
117+
],
119118
},
120119
component: () => import('@/views/knowledge/KnowledgeSetting.vue'),
121120
},

ui/src/router/modules/knowledge.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1+
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
12
const ModelRouter = {
23
path: '/knowledge',
34
name: 'knowledge',
4-
meta: { title: 'views.knowledge.title' },
5+
meta: {
6+
title: 'views.knowledge.title',
7+
menu: true,
8+
permission: [
9+
RoleConst.ADMIN,
10+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
11+
PermissionConst.KNOWLEDGE_READ.getWorkspacePermission,
12+
PermissionConst.KNOWLEDGE_READ.getWorkspacePermissionWorkspaceManageRole,
13+
],
14+
order: 2,
15+
},
516
redirect: '/knowledge',
617
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
718
children: [
@@ -20,12 +31,12 @@ const ModelRouter = {
2031
component: () => import('@/views/document/UploadDocument.vue'),
2132
hidden: true,
2233
},
23-
{
34+
{
2435
path: '/knowledge/import',
2536
name: 'ImportLarkDocument',
2637
meta: { activeMenu: '/knowledge' },
2738
component: () => import('@/views/document/ImportLarkDocument.vue'),
28-
hidden: true
39+
hidden: true,
2940
},
3041
],
3142
}

ui/src/router/modules/model.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
1+
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
12
const ModelRouter = {
23
path: '/model',
34
name: 'model',
4-
meta: { title: 'views.model.title' },
5+
meta: {
6+
title: 'views.model.title',
7+
menu: true,
8+
permission: [
9+
RoleConst.ADMIN,
10+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
11+
PermissionConst.MODEL_READ.getWorkspacePermission,
12+
PermissionConst.MODEL_READ.getWorkspacePermissionWorkspaceManageRole,
13+
],
14+
order: 4,
15+
},
516
redirect: '/model',
617
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
718
children: [
819
{
920
path: '/model',
1021
name: 'model-index',
11-
meta: { title: '模型主页', activeMenu: '/model' },
12-
component: () => import('@/views/model/index.vue')
13-
}
14-
]
22+
meta: {
23+
title: '模型主页',
24+
activeMenu: '/model',
25+
},
26+
component: () => import('@/views/model/index.vue'),
27+
},
28+
],
1529
}
1630

1731
export default ModelRouter

ui/src/router/modules/tool.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
1+
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
12
const ModelRouter = {
23
path: '/tool',
34
name: 'tool',
4-
meta: { title: 'views.tool.title' },
5+
meta: {
6+
title: 'views.tool.title',
7+
menu: true,
8+
permission: [
9+
RoleConst.ADMIN,
10+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
11+
PermissionConst.TOOL_READ.getWorkspacePermission,
12+
PermissionConst.TOOL_READ.getWorkspacePermissionWorkspaceManageRole,
13+
],
14+
order: 3,
15+
},
516
redirect: '/tool',
617
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
718
children: [
819
{
920
path: '/tool',
1021
name: 'tool-index',
1122
meta: { title: '工具主页', activeMenu: '/tool' },
12-
component: () => import('@/views/tool/index.vue')
13-
}
14-
]
23+
component: () => import('@/views/tool/index.vue'),
24+
},
25+
],
1526
}
1627

1728
export default ModelRouter

ui/src/router/routes.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,41 @@
11
import type { RouteRecordRaw } from 'vue-router'
22
const modules: any = import.meta.glob('./modules/*.ts', { eager: true })
3+
import { hasPermission, set_next_route } from '@/utils/permission/index'
34
const rolesRoutes: RouteRecordRaw[] = [...Object.keys(modules).map((key) => modules[key].default)]
45

56
export const routes: Array<RouteRecordRaw> = [
67
{
78
path: '/',
89
name: 'home',
9-
redirect: '/application',
10-
children: [...rolesRoutes],
10+
redirect: (to: any) => {
11+
const route = rolesRoutes.find((route: any) => {
12+
return (
13+
route.meta?.menu &&
14+
(route.meta.permission ? hasPermission(route.meta.permission as any, 'OR') : true)
15+
)
16+
})
17+
if (route?.name) {
18+
return { name: route?.name }
19+
}
20+
return { name: 'noPermission' }
21+
},
22+
children: [
23+
...rolesRoutes,
24+
{
25+
path: '/no-permission',
26+
name: 'noPermission',
27+
redirect: '/no-permission',
28+
meta: {},
29+
children: [
30+
{
31+
path: '/no-permission',
32+
name: 'noPermissionD',
33+
component: () => import('@/views/no-permission/index.vue'),
34+
},
35+
],
36+
component: () => import('@/layout/layout-template/SimpleLayout.vue'),
37+
},
38+
],
1139
},
1240

1341
// 高级编排
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<template>
2+
<div>没有权限访问</div>
3+
</template>
4+
<script setup lang="ts"></script>
5+
<style lang="scss" scoped></style>

0 commit comments

Comments
 (0)