11<script setup lang="ts">
2- import { onMounted , ref } from ' vue'
2+ import { computed , onMounted , ref } from ' vue'
33import { useRoute } from ' vue-router'
44import WorkspaceApi from ' @/api/admin/system/workspace'
55import CommonSystemApi from ' @/api/admin/system/common'
66import UserGroupsApi from ' @/api/admin/system/user-groups'
77import ResourceAuthorizationApi from ' @/api/admin/system/resource-authorization'
88import { RESOURCE_TYPE , RESOURCE_PERMISSION } from ' @/api/enums'
9- import type { ResourceAuthorizationType , ResourcePermissionItem , ResourcePermissionPayload , CommonUserOption , OptionItem , SystemUserGroup , WorkspaceItem } from ' @/api/types'
9+ import type {
10+ ResourceAuthorizationType ,
11+ ResourcePermissionItem ,
12+ ResourcePermissionPayload ,
13+ CommonUserOption ,
14+ OptionItem ,
15+ SystemUserGroup ,
16+ WorkspaceItem ,
17+ } from ' @/api/types'
1018import { useStore } from ' @/stores'
19+ import { perm } from ' @/permission'
1120import { MsgSuccess } from ' @/utils/message'
1221import WorkspaceDropdown from ' @/components/business/workspace-dropdown/index.vue'
1322import PermissionTable from ' ./components/PermissionTable.vue'
@@ -19,7 +28,12 @@ const { auth } = useStore()
1928const route = useRoute ()
2029
2130const resourceType = ref <ResourceAuthorizationType >((route .meta .resource as ResourceAuthorizationType ) ?? RESOURCE_TYPE .APPLICATION )
22- const resourceTypeOptions: OptionItem <ResourceAuthorizationType >[] = [RESOURCE_TYPE .APPLICATION , RESOURCE_TYPE .KNOWLEDGE , RESOURCE_TYPE .TOOL , RESOURCE_TYPE .MODEL ].map ((value ) => ({
31+ const resourceTypeOptions: OptionItem <ResourceAuthorizationType >[] = [
32+ RESOURCE_TYPE .APPLICATION ,
33+ RESOURCE_TYPE .KNOWLEDGE ,
34+ RESOURCE_TYPE .TOOL ,
35+ RESOURCE_TYPE .MODEL ,
36+ ].map ((value ) => ({
2337 label: RESOURCE_AUTHORIZATION_LABELS [value ],
2438 value ,
2539}))
@@ -51,7 +65,10 @@ const selectedUserGroupId = ref('')
5165const selectedUserId = ref (' ' )
5266
5367function loadAuthorizationTargets() {
54- return Promise .all ([UserGroupsApi .getSystemUserGroups (selectedWorkspaceId .value ), CommonSystemApi .getWorkspaceMembers (selectedWorkspaceId .value )]).then (([groups , users ]) => {
68+ return Promise .all ([
69+ UserGroupsApi .getSystemUserGroups (selectedWorkspaceId .value ),
70+ CommonSystemApi .getWorkspaceMembers (selectedWorkspaceId .value ),
71+ ]).then (([groups , users ]) => {
5572 userGroups .value = groups
5673 workspaceMembers .value = users
5774 selectedUserGroupId .value = groups [0 ]?.id ?? ' '
@@ -75,6 +92,7 @@ function handleUserSelect(user: CommonUserOption) {
7592}
7693
7794/* 资源权限 */
95+
7896const loadingPermissions = ref (false )
7997const resourcePermissions = ref <ResourcePermissionItem []>([])
8098
@@ -129,6 +147,8 @@ function buildResourceTree(resourceItems: ResourcePermissionItem[]) {
129147/* 保存权限 */
130148
131149function handlePermissionsSubmit(permissions : ResourcePermissionPayload []) {
150+ if (! canEditResourcePermission .value || loadingPermissions .value ) return
151+
132152 const targetId = targetType .value === ' user-group' ? selectedUserGroupId .value : selectedUserId .value
133153
134154 if (! targetId ) return
@@ -155,6 +175,15 @@ onMounted(() => {
155175 loadingView .value = false
156176 })
157177})
178+
179+ // 权限
180+ const resourceEditPermissions: Record <ResourceAuthorizationType , () => boolean > = {
181+ [RESOURCE_TYPE .APPLICATION ]: perm .system .authorization .application .edit ,
182+ [RESOURCE_TYPE .KNOWLEDGE ]: perm .system .authorization .knowledge .edit ,
183+ [RESOURCE_TYPE .TOOL ]: perm .system .authorization .tool .edit ,
184+ [RESOURCE_TYPE .MODEL ]: perm .system .authorization .model .edit ,
185+ }
186+ const canEditResourcePermission = computed (() => resourceEditPermissions [resourceType .value ]())
158187 </script >
159188
160189<template >
@@ -171,7 +200,12 @@ onMounted(() => {
171200 </el-tabs >
172201 </component >
173202
174- <UserGroupAuthorizationList v-if =" targetType === ' user-group' " :active-id =" selectedUserGroupId " :user-groups =" userGroups " @select =" handleUserGroupSelect " />
203+ <UserGroupAuthorizationList
204+ v-if =" targetType === ' user-group' "
205+ :active-id =" selectedUserGroupId "
206+ :user-groups =" userGroups "
207+ @select =" handleUserGroupSelect "
208+ />
175209 <UserAuthorizationList v-else :active-id =" selectedUserId " :users =" workspaceMembers " @select =" handleUserSelect " />
176210 </template >
177211
@@ -180,12 +214,23 @@ onMounted(() => {
180214 <div class =" w-full" >
181215 <h4 class =" mb-4" >资源权限配置</h4 >
182216 <el-tabs v-model =" resourceType" class =" w-full" @tab-change =" loadResourcePermissions" >
183- <el-tab-pane v-for =" resourceTypeOption in resourceTypeOptions" :key =" resourceTypeOption.value" :label =" resourceTypeOption.label" :name =" resourceTypeOption.value" />
217+ <el-tab-pane
218+ v-for =" resourceTypeOption in resourceTypeOptions"
219+ :key =" resourceTypeOption.value"
220+ :label =" resourceTypeOption.label"
221+ :name =" resourceTypeOption.value"
222+ />
184223 </el-tabs >
185224 </div >
186225 </component >
187226
188- <PermissionTable v-loading =" loadingPermissions " :data =" resourcePermissions " :resource-type =" resourceType " @submit =" handlePermissionsSubmit " />
227+ <PermissionTable
228+ v-loading =" loadingPermissions "
229+ :data =" resourcePermissions "
230+ :resource-type =" resourceType "
231+ :disabled =" ! canEditResourcePermission || loadingPermissions "
232+ @submit =" handlePermissionsSubmit "
233+ />
189234 </template >
190235 </MkViewLayout >
191236</template >
0 commit comments