Skip to content

Commit 19e8e76

Browse files
authored
feat: Permission manage (#3283)
1 parent 0d36704 commit 19e8e76

File tree

7 files changed

+150
-39
lines changed

7 files changed

+150
-39
lines changed

ui/src/stores/modules-shared-system/login.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {defineStore} from 'pinia'
22
import {type Ref} from 'vue'
33
import loginApi from '@/api/user/login'
4-
import type {LoginRequest} from '@/api/type/login'
4+
import type { LoginRequest } from '@/api/type/login'
5+
56
import useUserStore from '@/stores/modules/user'
67

78
const useLoginStore = defineStore('logi', {

ui/src/utils/permission/data.ts

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,69 @@
11
import { Permission, Role, Edition } from '@/utils/permission/type'
2+
// class Operate(Enum):
3+
// """
4+
// 一个权限组的操作权限
5+
// """
6+
// READ = 'READ'
7+
// EDIT = "READ+EDIT"
8+
// CREATE = "READ+CREATE"
9+
// DELETE = "READ+DELETE"
10+
// """
11+
// 使用权限
12+
// """
13+
// USE = "USE"
14+
// IMPORT = "READ+IMPORT"
15+
// EXPORT = "READ+EXPORT" # 导入导出
16+
// DEBUG = "READ+DEBUG" # 调试
17+
// SYNC = "READ+SYNC" # 同步
18+
// GENERATE = "READ+GENERATE" # 生成
19+
// ADD_MEMBER = "READ+ADD_MEMBER" # 添加成员
20+
// REMOVE_MEMBER = "READ+REMOVE_MEMBER" # 添加成员
21+
// VECTOR = "READ+VECTOR" # 向量化
22+
// MIGRATE = "READ+MIGRATE" # 迁移
23+
// RELATE = "READ+RELATE" # 关联
24+
// USER_GROUP = "READ+USER_GROUP" # 用户组
25+
// ANNOTATION = "READ+ANNOTATION" # 标注
26+
// CLEAR_POLICY = "READ+CLEAR_POLICY"
227
const PermissionConst = {
328
USER_READ: new Permission('USER:READ'),
429
USER_CREATE: new Permission('USER:CREATE'),
5-
KNOWLEDGE_READ: new Permission('KNOWLEDGE:READ'),
630
APPLICATION_OVERVIEW_READ: new Permission('APPLICATION_OVERVIEW_READ'),
31+
32+
KNOWLEDGE_READ: new Permission('KNOWLEDGE:READ'),
33+
KNOWLEDGE_CREATE: new Permission('KNOWLEDGE:READ+CREATE'),
34+
KNOWLEDGE_SYNC: new Permission('KNOWLEDGE:READ+SYNC'),
35+
KNOWLEDGE_VECTOR: new Permission('KNOWLEDGE:READ+VECTOR'),
36+
KNOWLEDGE_EDIT: new Permission('KNOWLEDGE:READ+EDIT'),
37+
KNOWLEDGE_EXPORT: new Permission('KNOWLEDGE:READ+EXPORT'),
38+
KNOWLEDGE_DELETE: new Permission('KNOWLEDGE:READ+DELETE'),
39+
40+
KNOWLEDGE_DOCUMENT_READ:new Permission('KNOWLEDGE_DOCUMENT:READ'),
41+
KNOWLEDGE_DOCUMENT_CREATE:new Permission('KNOWLEDGE_DOCUMENT:READ+CREATE'),
42+
KNOWLEDGE_DOCUMENT_EDIT:new Permission('KNOWLEDGE_DOCUMENT:READ+EDIT'),
43+
KNOWLEDGE_DOCUMENT_SYNC:new Permission('KNOWLEDGE_DOCUMENT:READ+SYNC'),
44+
KNOWLEDGE_DOCUMENT_MIGRATE:new Permission('KNOWLEDGE_DOCUMENT:READ+MIGRATE'),
45+
KNOWLEDGE_DOCUMENT_VECTOR:new Permission('KNOWLEDGE_DOCUMENT:READ+VECTOR'),
46+
KNOWLEDGE_DOCUMENT_GENERATE:new Permission('KNOWLEDGE_DOCUMENT:READ+GENERATE'),
47+
KNOWLEDGE_DOCUMENT_EXPORT:new Permission('KNOWLEDGE_DOCUMENT:READ+EXPORT'),
48+
49+
KNOWLEDGE_PROBLEM_READ:new Permission('KNOWLEDGE_PROBLEM:READ'),
50+
KNOWLEDGE_PROBLEM_CREATE:new Permission('KNOWLEDGE_PROBLEM:READ+CREATE'),
51+
KNOWLEDGE_PROBLEM_EDIT:new Permission('KNOWLEDGE_PROBLEM:READ+EDIT'),
52+
KNOWLEDGE_PROBLEM_RELATE:new Permission('KNOWLEDGE_PROBLEM:READ+RELATE'),
53+
KNOWLEDGE_PROBLEM_DELETE:new Permission('KNOWLEDGE_PROBLEM:READ+DELETE'),
54+
55+
MODEL_READ:new Permission('MODEL:READ'),
56+
MODEL_CREATE:new Permission('MODEL:READ+CREATE'),
57+
MODEL_EDIT:new Permission('MODEL:READ+EDIT'),
58+
MODEL_DELETE:new Permission('MODEL:READ+DELETE'),
59+
60+
61+
62+
63+
SYSTEM_API_KEY_EDIT:new Permission('OTHER: READ+EDIT')
64+
65+
66+
767
}
868
const RoleConst = {
969
ADMIN: new Role('ADMIN'),

ui/src/views/document/index.vue

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,30 @@
1010
v-if="knowledgeDetail.type === 0"
1111
type="primary"
1212
@click="router.push({ path: '/knowledge/document/upload', query: { id: id } })"
13+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getWorkspacePermission]"
1314
>{{ $t('views.document.uploadDocument') }}
1415
</el-button>
1516
<el-button v-if="knowledgeDetail.type === 1" type="primary" @click="importDoc"
16-
>{{ $t('views.document.importDocument') }}
17+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_CREATE.getWorkspacePermission]"
18+
>{{ $t('views.document.importDocument') }}
1719
</el-button>
1820

19-
<el-button @click="batchRefresh" :disabled="multipleSelection.length === 0">
20-
{{ $t('views.knowledge.setting.vectorization') }}
21+
<el-button @click="batchRefresh" :disabled="multipleSelection.length === 0"
22+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]"
23+
>{{ $t('views.knowledge.setting.vectorization') }}
2124
</el-button>
22-
<el-button @click="openGenerateDialog()" :disabled="multipleSelection.length === 0">
23-
{{ $t('views.document.generateQuestion.title') }}
25+
<el-button @click="openGenerateDialog()" :disabled="multipleSelection.length === 0"
26+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_GENERATE.getWorkspacePermission]"
27+
>{{ $t('views.document.generateQuestion.title') }}
2428
</el-button>
25-
<el-button @click="openknowledgeDialog()" :disabled="multipleSelection.length === 0">
26-
{{ $t('views.document.setting.migration') }}
29+
<el-button @click="openknowledgeDialog()" :disabled="multipleSelection.length === 0"
30+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_MIGRATE.getWorkspacePermission]"
31+
>{{ $t('views.document.setting.migration') }}
2732
</el-button>
2833
<el-dropdown>
29-
<el-button class="ml-12 mr-12">
34+
<el-button class="ml-12 mr-12"
35+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermission]"
36+
>
3037
<el-icon><MoreFilled /></el-icon>
3138
</el-button>
3239
<template #dropdown>
@@ -350,6 +357,7 @@
350357
text
351358
@click.stop="cancelTask(row, TaskType.EMBEDDING)"
352359
:title="$t('views.document.setting.cancelVectorization')"
360+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]"
353361
>
354362
<AppIcon iconName="app-close" style="font-size: 16px"></AppIcon>
355363
</el-button>
@@ -360,6 +368,7 @@
360368
text
361369
@click.stop="refreshDocument(row)"
362370
:title="$t('views.knowledge.setting.vectorization')"
371+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]"
363372
>
364373
<AppIcon iconName="app-document-refresh" style="font-size: 16px"></AppIcon>
365374
</el-button>
@@ -370,13 +379,16 @@
370379
text
371380
@click.stop="settingDoc(row)"
372381
:title="$t('common.setting')"
382+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermission]"
373383
>
374384
<el-icon><Setting /></el-icon>
375385
</el-button>
376386
</span>
377387
<span @click.stop>
378388
<el-dropdown trigger="click">
379-
<el-button text type="primary">
389+
<el-button text type="primary"
390+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermission]"
391+
>
380392
<el-icon><MoreFilled /></el-icon>
381393
</el-button>
382394
<template #dropdown>
@@ -387,8 +399,7 @@
387399
getTaskState(row.status, TaskType.GENERATE_PROBLEM),
388400
)
389401
"
390-
@click="cancelTask(row, TaskType.GENERATE_PROBLEM)"
391-
>
402+
@click="cancelTask(row, TaskType.GENERATE_PROBLEM)">
392403
<el-icon><Connection /></el-icon>
393404
{{ $t('views.document.setting.cancelGenerateQuestion') }}
394405
</el-dropdown-item>
@@ -408,9 +419,8 @@
408419
<AppIcon iconName="app-export"></AppIcon>
409420
{{ $t('views.document.setting.export') }} Zip
410421
</el-dropdown-item>
411-
<el-dropdown-item icon="Delete" @click.stop="deleteDocument(row)">{{
412-
$t('common.delete')
413-
}}</el-dropdown-item>
422+
<el-dropdown-item icon="Delete" @click.stop="deleteDocument(row)">
423+
{{$t('common.delete')}}</el-dropdown-item>
414424
</el-dropdown-menu>
415425
</template>
416426
</el-dropdown>
@@ -423,6 +433,7 @@
423433
text
424434
@click.stop="syncDocument(row)"
425435
:title="$t('views.knowledge.setting.sync')"
436+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_SYNC.getWorkspacePermission]"
426437
>
427438
<el-icon><Refresh /></el-icon>
428439
</el-button>
@@ -438,7 +449,8 @@
438449
text
439450
@click.stop="cancelTask(row, TaskType.EMBEDDING)"
440451
:title="$t('views.document.setting.cancelVectorization')"
441-
>
452+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]"
453+
>
442454
<AppIcon iconName="app-close" style="font-size: 16px"></AppIcon>
443455
</el-button>
444456

@@ -448,19 +460,23 @@
448460
text
449461
@click.stop="refreshDocument(row)"
450462
:title="$t('views.knowledge.setting.vectorization')"
451-
>
463+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]"
464+
>
452465
<AppIcon iconName="app-document-refresh" style="font-size: 16px"></AppIcon>
453466
</el-button>
454467
</span>
455468

456469
<span @click.stop>
457470
<el-dropdown trigger="click">
458-
<el-button text type="primary">
471+
<el-button text type="primary"
472+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_EDIT.getWorkspacePermission]"
473+
>
459474
<el-icon><MoreFilled /></el-icon>
460475
</el-button>
461476
<template #dropdown>
462477
<el-dropdown-menu>
463-
<el-dropdown-item icon="Setting" @click="settingDoc(row)">{{
478+
<el-dropdown-item icon="Setting" @click="settingDoc(row)"
479+
>{{
464480
$t('common.setting')
465481
}}</el-dropdown-item>
466482
<el-dropdown-item
@@ -474,25 +490,30 @@
474490
<el-icon><Connection /></el-icon>
475491
{{ $t('views.document.setting.cancelGenerateQuestion') }}
476492
</el-dropdown-item>
477-
<el-dropdown-item v-else @click="openGenerateDialog(row)">
493+
<el-dropdown-item v-else @click="openGenerateDialog(row)"
494+
>
478495
<el-icon><Connection /></el-icon>
479496
{{ $t('views.document.generateQuestion.title') }}
480497
</el-dropdown-item>
481-
<el-dropdown-item @click="openknowledgeDialog(row)">
498+
<el-dropdown-item @click="openknowledgeDialog(row)"
499+
>
482500
<AppIcon iconName="app-migrate"></AppIcon>
483-
{{ $t('views.document.setting.migration') }}</el-dropdown-item
501+
{{ $t('views.document.setting.migration') }}
502+
</el-dropdown-item>
503+
<el-dropdown-item @click="exportDocument(row)"
484504
>
485-
<el-dropdown-item @click="exportDocument(row)">
486505
<AppIcon iconName="app-export"></AppIcon>
487506
{{ $t('views.document.setting.export') }} Excel
488507
</el-dropdown-item>
489-
<el-dropdown-item @click="exportDocumentZip(row)">
508+
<el-dropdown-item @click="exportDocumentZip(row)"
509+
>
490510
<AppIcon iconName="app-export"></AppIcon>
491511
{{ $t('views.document.setting.export') }} Zip
492512
</el-dropdown-item>
493-
<el-dropdown-item icon="Delete" @click.stop="deleteDocument(row)">{{
494-
$t('common.delete')
495-
}}</el-dropdown-item>
513+
<el-dropdown-item icon="Delete" @click.stop="deleteDocument(row)"
514+
>
515+
{{$t('common.delete')}}
516+
</el-dropdown-item>
496517
</el-dropdown-menu>
497518
</template>
498519
</el-dropdown>
@@ -505,10 +526,14 @@
505526
</div>
506527
</el-card>
507528
<div class="mul-operation w-full flex" v-if="multipleSelection.length !== 0">
508-
<el-button :disabled="multipleSelection.length === 0" @click="cancelTaskHandle(1, row)">
529+
<el-button :disabled="multipleSelection.length === 0" @click="cancelTaskHandle(1, row)"
530+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_VECTOR.getWorkspacePermission]">
509531
{{ $t('views.document.setting.cancelVectorization') }}
510532
</el-button>
511-
<el-button :disabled="multipleSelection.length === 0" @click="cancelTaskHandle(2, row)">
533+
<el-button :disabled="multipleSelection.length === 0" @click="cancelTaskHandle(2, row)"
534+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.KNOWLEDGE_DOCUMENT_GENERATE.getWorkspacePermission]"
535+
>
536+
512537
{{ $t('views.document.setting.cancelGenerate') }}
513538
</el-button>
514539
<el-text type="info" class="secondary ml-24">
@@ -547,6 +572,8 @@ import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vu
547572
import EmbeddingContentDialog from '@/views/document/component/EmbeddingContentDialog.vue'
548573
import { TaskType, State } from '@/utils/status'
549574
import { t } from '@/locales'
575+
import { PermissionConst, RoleConst } from '@/utils/permission/data'
576+
import { hasPermission } from '@/utils/permission/index'
550577
551578
const router = useRouter()
552579
const route = useRoute()

ui/src/views/knowledge/index.vue

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@
4444
</el-select>
4545
</div>
4646
<el-dropdown trigger="click">
47-
<el-button type="primary" class="ml-8">
47+
<el-button type="primary" class="ml-8"
48+
v-hasPermission="[RoleConst.ADMIN.getWorkspaceRole,PermissionConst.KNOWLEDGE_CREATE.getWorkspacePermission]"
49+
>
4850
{{ $t('common.create') }}
4951
<el-icon class="el-icon--right">
5052
<arrow-down />
@@ -215,7 +217,9 @@
215217
<template #mouseEnter>
216218
<div @click.stop>
217219
<el-dropdown trigger="click">
218-
<el-button text @click.stop>
220+
<el-button text @click.stop
221+
v-hasPermission="[RoleConst.ADMIN.getWorkspaceRole,PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermission]"
222+
>
219223
<el-icon>
220224
<MoreFilled />
221225
</el-icon>
@@ -293,6 +297,8 @@ import useStore from '@/stores'
293297
import { numberFormat } from '@/utils/common'
294298
import { t } from '@/locales'
295299
import { useRouter } from 'vue-router'
300+
import { PermissionConst, RoleConst } from '@/utils/permission/data'
301+
import { hasPermission } from '@/utils/permission/index'
296302
297303
const router = useRouter()
298304
const { folder } = useStore()

ui/src/views/model/component/ModelCard.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
:disabled="!is_permisstion"
8080
text
8181
@click.stop="openEditModel"
82+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission]"
8283
>
8384
{{ $t('common.modify') }}
8485
</el-dropdown-item>
@@ -93,6 +94,7 @@
9394
:disabled="!is_permisstion"
9495
icon="Setting"
9596
@click.stop="openParamSetting"
97+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_EDIT.getWorkspacePermission]"
9698
>
9799
{{ $t('views.model.modelForm.title.paramSetting') }}
98100
</el-dropdown-item>
@@ -102,6 +104,7 @@
102104
:disabled="!is_permisstion"
103105
text
104106
@click.stop="deleteModel"
107+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_DELETE.getWorkspacePermission]"
105108
>
106109
{{ $t('common.delete') }}
107110
</el-dropdown-item>
@@ -124,6 +127,9 @@ import {modelType} from '@/enums/model'
124127
import useStore from '@/stores'
125128
import ParamSettingDialog from './ParamSettingDialog.vue'
126129
import {t} from '@/locales'
130+
import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data'
131+
import { hasPermission } from '@/utils/permission/index'
132+
import { ComplexPermission } from '@/utils/permission/type'
127133
128134
const props = defineProps<{
129135
model: Model

ui/src/views/model/index.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@
5555
</template>
5656
</el-select>
5757
</div>
58-
<el-button class="ml-16" type="primary" @click="openCreateModel(active_provider)">
59-
{{ $t('views.model.addModel') }}</el-button
58+
<el-button class="ml-16" type="primary" @click="openCreateModel(active_provider)"
59+
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.MODEL_CREATE.getWorkspacePermission]"
6060
>
61+
{{ $t('views.model.addModel') }}
62+
</el-button>
6163
</div>
6264
</template>
6365

@@ -116,6 +118,8 @@ import SharedWorkspace from '@/views/shared/model-shared/SharedWorkspace.vue'
116118
import SelectProviderDialog from '@/views/model/component/SelectProviderDialog.vue'
117119
import useStore from '@/stores'
118120
import { t } from '@/locales'
121+
import { PermissionConst, RoleConst } from '@/utils/permission/data'
122+
import { hasPermission } from '@/utils/permission/index'
119123
120124
const { model } = useStore()
121125

0 commit comments

Comments
 (0)