Skip to content

Commit 94560b8

Browse files
committed
feat: Folder authorization frontend
1 parent 89749a3 commit 94560b8

File tree

19 files changed

+191
-18
lines changed

19 files changed

+191
-18
lines changed

ui/src/api/system/resource-authorization.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ const getResourceAuthorization: (
1212
workspace_id: string,
1313
user_id: string,
1414
resource: string,
15-
page: pageRequest,
1615
params?: any,
1716
loading?: Ref<boolean>,
18-
) => Promise<Result<any>> = (workspace_id, user_id, resource, page, params, loading) => {
17+
) => Promise<Result<any>> = (workspace_id, user_id, resource, params, loading) => {
1918
return get(
20-
`${prefix}/${workspace_id}/user_resource_permission/user/${user_id}/resource/${resource}/${page.current_page}/${page.page_size}`,
19+
`${prefix}/${workspace_id}/user_resource_permission/user/${user_id}/resource/${resource}`,
2120
params,
2221
loading,
2322
)

ui/src/components/folder-tree/index.vue

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,38 +48,45 @@
4848
</div>
4949

5050
<div
51-
v-if="canOperation"
51+
v-if="canOperation && permissionPrecise.folderManage(data.id)"
5252
@click.stop
5353
v-show="hoverNodeId === data.id"
5454
@mouseenter.stop="handleMouseEnter(data)"
5555
@mouseleave.stop="handleMouseleave"
5656
class="mr-16"
5757
>
5858
<el-dropdown trigger="click" :teleported="false">
59-
<el-button text class="w-full" v-if="MoreFilledPermission(node)">
59+
<el-button text class="w-full" v-if="permissionPrecise.folderManage(data.id)">
6060
<AppIcon iconName="app-more"></AppIcon>
6161
</el-button>
6262
<template #dropdown>
6363
<el-dropdown-menu>
6464
<el-dropdown-item
6565
@click.stop="openCreateFolder(data)"
66-
v-if="node.level !== 3 && permissionPrecise.folderCreate()"
66+
v-if="node.level !== 3 && permissionPrecise.folderManage(data.id)"
6767
>
6868
<AppIcon iconName="app-add-folder" class="color-secondary"></AppIcon>
6969
{{ $t('components.folder.addChildFolder') }}
7070
</el-dropdown-item>
7171
<el-dropdown-item
7272
@click.stop="openEditFolder(data)"
73-
v-if="permissionPrecise.folderEdit()"
73+
v-if="permissionPrecise.folderManage(data.id)"
7474
>
7575
<AppIcon iconName="app-edit" class="color-secondary"></AppIcon>
7676
{{ $t('common.edit') }}
7777
</el-dropdown-item>
78+
<el-dropdown-item
79+
@click.stop="openAuthorization(data)"
80+
v-if="permissionPrecise.folderManage(data.id)"
81+
>
82+
<AppIcon iconName="app-resource-authorization" class="color-secondary"></AppIcon>
83+
{{ $t('views.system.resourceAuthorization.title') }}
84+
</el-dropdown-item>
7885
<el-dropdown-item
7986
divided
8087
@click.stop="deleteFolder(data)"
8188
:disabled="!data.parent_id"
82-
v-if="permissionPrecise.folderDelete()"
89+
v-if="permissionPrecise.folderManage(data.id)"
8390
>
8491
<AppIcon iconName="app-delete" class="color-secondary"></AppIcon>
8592
{{ $t('common.delete') }}
@@ -94,6 +101,12 @@
94101
</el-scrollbar>
95102
</div>
96103
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" :title="title" />
104+
<ResourceAuthorizationDrawer
105+
:type="props.source"
106+
:is-folder="true"
107+
:is-root-folder="!currentNode?.parent_id"
108+
ref="ResourceAuthorizationDrawerRef"
109+
/>
97110
</div>
98111
</template>
99112

@@ -102,6 +115,7 @@ import { computed, onUnmounted, ref, watch } from 'vue'
102115
import { onBeforeRouteLeave } from 'vue-router'
103116
import type { TreeInstance } from 'element-plus'
104117
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
118+
import ResourceAuthorizationDrawer from '@/components/resource-authorization-drawer/index.vue'
105119
import { t } from '@/locales'
106120
import { i18n_name } from '@/utils/common'
107121
import folderApi from '@/api/folder'
@@ -255,6 +269,13 @@ function openEditFolder(row: Tree) {
255269
CreateFolderDialogRef.value.open(props.source, row.id, row)
256270
}
257271
272+
const currentNode = ref<Tree | null>(null)
273+
const ResourceAuthorizationDrawerRef = ref()
274+
function openAuthorization(data: any) {
275+
currentNode.value = data
276+
ResourceAuthorizationDrawerRef.value.open(data.id)
277+
}
278+
258279
function refreshFolder() {
259280
emit('refreshTree')
260281
}

ui/src/components/resource-authorization-drawer/index.vue

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
v-model="row.permission"
113113
@change="(val: any) => permissionsHandle(val, row)"
114114
>
115-
<template v-for="(item, index) in permissionOptions" :key="index">
115+
<template v-for="(item, index) in getFolderPermissionOptions()" :key="index">
116116
<el-radio :value="item.value" class="mr-16">{{ item.label }}</el-radio>
117117
</template>
118118
</el-radio-group>
@@ -157,6 +157,8 @@ import useStore from '@/stores'
157157
const { user } = useStore()
158158
const props = defineProps<{
159159
type: string
160+
isFolder?: boolean
161+
isRootFolder?: boolean
160162
}>()
161163
162164
const apiType = computed(() => {
@@ -166,6 +168,24 @@ const apiType = computed(() => {
166168
return 'workspace'
167169
}
168170
})
171+
172+
const permissionOptionMap = computed(() => {
173+
return {
174+
rootFolder: getPermissionOptions(true, true),
175+
folder: getPermissionOptions(true, false),
176+
}
177+
})
178+
179+
const getFolderPermissionOptions = () => {
180+
if (props.isRootFolder) {
181+
return permissionOptionMap.value.rootFolder
182+
}
183+
if (props.isFolder) {
184+
return permissionOptionMap.value.folder
185+
}
186+
return getPermissionOptions(false, false)
187+
}
188+
169189
const permissionOptions = computed(() => {
170190
return getPermissionOptions()
171191
})
@@ -281,7 +301,12 @@ const getPermissionList = () => {
281301
loading,
282302
)
283303
.then((res: any) => {
284-
permissionData.value = res.data.records || []
304+
permissionData.value = res.data.records.map((item: any) => {
305+
if (props.isRootFolder && item.permission === 'NOT_AUTH') {
306+
return {...item, permission: 'VIEW'}
307+
}
308+
return item
309+
}) || []
285310
paginationConfig.total = res.data.total || 0
286311
})
287312
}

ui/src/permission/application/system-manage.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ const systemManage = {
1313
'OR'
1414
),
1515
folderEdit: () => false,
16+
folderRead: () => false,
17+
folderManage: () => false,
1618
export: () =>
1719
hasPermission(
1820
[

ui/src/permission/application/workspace.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,26 @@ const workspace = {
2323
],
2424
'OR'
2525
),
26+
folderRead: (folder_id: string) =>
27+
hasPermission(
28+
[
29+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(folder_id)],[],'AND'),
30+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
31+
PermissionConst.APPLICATION_FOLDER_READ.getApplicationWorkspaceResourcePermission(folder_id),
32+
PermissionConst.APPLICATION_FOLDER_READ.getWorkspacePermissionWorkspaceManageRole,
33+
],
34+
'OR'
35+
),
36+
folderManage: (folder_id: string) =>
37+
hasPermission(
38+
[
39+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(folder_id)],[],'AND'),
40+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
41+
PermissionConst.APPLICATION_FOLDER_EDIT.getApplicationWorkspaceResourcePermission(folder_id),
42+
PermissionConst.APPLICATION_EDIT.getWorkspacePermissionWorkspaceManageRole,
43+
],
44+
'OR'
45+
),
2646
edit: (source_id:string) =>
2747
hasPermission(
2848
[

ui/src/permission/knowledge/system-manage.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ const systemManage = {
159159
PermissionConst.RESOURCE_KNOWLEDGE_AUTH
160160
],'OR'
161161
),
162+
folderRead: () => false,
163+
folderManage: () => false,
162164
folderCreate: () => false,
163165
folderEdit: () => false,
164166
folderDelete: () => false,

ui/src/permission/knowledge/system-share.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ const share = {
185185
chat_user_edit: () =>false,
186186

187187
auth: () => false,
188+
folderRead: () => false,
189+
folderManage: () => false,
188190
folderCreate: () => false,
189191
folderEdit: () => false,
190192
folderDelete: () => false,

ui/src/permission/knowledge/workspace-share.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ const workspaceShare = {
3333
problem_edit: () => false,
3434
chat_user_edit: () =>false,
3535

36+
folderRead: () => false,
37+
folderManage: () => false,
3638
folderCreate: () => false,
3739
folderEdit: () => false,
3840
folderDelete: () => false,

ui/src/permission/knowledge/workspace.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ const workspace = {
2020
],
2121
'OR',
2222
),
23+
folderRead: () => true,
24+
folderManage: () => true,
2325
folderCreate: () =>
2426
hasPermission(
2527
[

ui/src/permission/model/system-manage.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ const systemManage = {
2121
hasPermission([RoleConst.ADMIN, PermissionConst.RESOURCE_MODEL_DELETE], 'OR'),
2222

2323
auth: () =>
24-
hasPermission([RoleConst.ADMIN, PermissionConst.RESOURCE_MODEL_AUTH], 'OR'),
24+
hasPermission([RoleConst.ADMIN, PermissionConst.RESOURCE_MODEL_AUTH], 'OR'),
25+
26+
folderRead: () => false,
27+
folderManage: () => false,
2528
folderCreate: () => false,
2629
folderEdit: () => false,
2730
folderDelete: () => false,

0 commit comments

Comments
 (0)