Skip to content

Commit a9d106d

Browse files
fix: Resource authorization modify (#3326)
Co-authored-by: zhangzhanwei <[email protected]>
1 parent 63abffe commit a9d106d

File tree

5 files changed

+70
-57
lines changed

5 files changed

+70
-57
lines changed

ui/src/layout/layout-header/avatar/index.vue

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,22 @@
2828
</template>
2929
</div>
3030
</div>
31-
<el-dropdown-item class="border-t p-8" @click="openResetPassword">
31+
<el-dropdown-item class="border-t p-8" @click="openResetPassword"
32+
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.CHANGE_PASSWORD],'OR')"
33+
>
3234
{{ $t('views.login.resetPassword') }}
3335
</el-dropdown-item>
34-
<div
35-
v-hasPermission="
36-
new ComplexPermission([], [], [EditionConst.IS_EE, EditionConst.IS_PE], 'OR')
37-
"
38-
>
39-
<el-dropdown-item class="p-8" @click="openAPIKeyDialog">
36+
<div v-hasPermission="new ComplexPermission([], [], [EditionConst.IS_EE, EditionConst.IS_PE], 'OR')">
37+
<el-dropdown-item class="p-8" @click="openAPIKeyDialog"
38+
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.SYSTEM_API_KEY_EDIT],'OR')"
39+
>
40+
4041
{{ $t('layout.apiKey') }}
4142
</el-dropdown-item>
4243
</div>
43-
<el-dropdown-item style="padding: 0" @click.stop>
44+
<el-dropdown-item style="padding: 0" @click.stop
45+
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.SWITCH_LANGUAGE],'OR')"
46+
>
4447
<el-dropdown class="w-full" trigger="hover" placement="left-start">
4548
<div class="flex-between w-full" style="line-height: 22px; padding: 12px 11px">
4649
<span> {{ $t('layout.language') }}</span>
@@ -73,7 +76,9 @@
7376
</template>
7477
</el-dropdown>
7578
</el-dropdown-item>
76-
<el-dropdown-item @click="openAbout">
79+
<el-dropdown-item @click="openAbout"
80+
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,PermissionConst.ABOUT_READ],'OR')"
81+
>
7782
{{ $t('layout.about.title') }}
7883
</el-dropdown-item>
7984

@@ -104,9 +109,10 @@ import ResetPassword from './ResetPassword.vue'
104109
import AboutDialog from './AboutDialog.vue'
105110
// import UserPwdDialog from '@/views/user-manage/component/UserPwdDialog.vue'
106111
import APIKeyDialog from './APIKeyDialog.vue'
107-
import { ComplexPermission } from '@/utils/permission/type'
108-
import { langList } from '@/locales/index'
109-
import { EditionConst } from '@/utils/permission/data'
112+
import {ComplexPermission} from '@/utils/permission/type'
113+
import {langList} from '@/locales/index'
114+
import { hasPermission } from '@/utils/permission'
115+
import { PermissionConst, RoleConst,EditionConst } from '@/utils/permission/data'
110116
111117
const { user, login } = useStore()
112118
const router = useRouter()

ui/src/utils/permission/data.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,10 @@ const PermissionConst = {
160160

161161

162162

163-
164-
165-
166-
SYSTEM_API_KEY_EDIT:new Permission('OTHER: READ+EDIT')
163+
ABOUT_READ:new Permission('OTHER:READ'),
164+
SWITCH_LANGUAGE:new Permission('OTHER:READ+EDIT'),
165+
CHANGE_PASSWORD:new Permission('OTHER:READ+CREATE'),
166+
SYSTEM_API_KEY_EDIT:new Permission('OTHER:READ+DELETE')
167167

168168

169169

ui/src/utils/permission/type.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ export class Permission {
5353
const { user } = useStore()
5454
return `${this.permission}:/WORKSPACE/${user.getWorkspaceId()}/${resource}/${resource_id}`
5555
}
56+
/**
57+
*
58+
* @param resource_id 资源id
59+
* @returns 工作空间下知识库资源权限
60+
*/
61+
getKnowledgeWorkspaceResourcePermission=( resource_id: string)=>{
62+
return this.getWorkspaceResourcePermission('KNOWLEDGE',resource_id)
63+
}
64+
/**
65+
*
66+
* @param resource_id 资源id
67+
* @returns 工作空间下应用资源权限
68+
*/
69+
getApplicationWorkspaceResourcePermission=( resource_id: string)=>{
70+
return this.getWorkspaceResourcePermission('APPLICATION',resource_id)
71+
}
5672
toString() {
5773
return this.permission
5874
}

ui/src/views/resource-authorization/index.vue

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,19 @@
66
<div class="resource-authorization__left border-r p-8">
77
<div class="p-8">
88
<h4 class="mb-12">{{ $t('views.resourceAuthorization.member') }}</h4>
9-
<el-input
10-
v-model="filterText"
11-
:placeholder="$t('common.search')"
12-
prefix-icon="Search"
13-
clearable
14-
/>
9+
<el-input v-model="filterText" :placeholder="$t('common.search')" prefix-icon="Search" clearable />
1510
</div>
1611
<div class="list-height-left">
1712
<el-scrollbar>
18-
<common-list
19-
:data="filterMember"
20-
class="mt-8"
21-
v-loading="loading"
22-
@click="clickMemberHandle"
23-
:default-active="currentUser"
24-
>
13+
<common-list :data="filterMember" class="mt-8" v-loading="loading" @click="clickMemberHandle"
14+
:default-active="currentUser">
2515
<template #default="{ row }">
2616
<div class="flex-between">
2717
<div>
2818
<span class="mr-8">{{ row.nick_name }}</span>
2919
<el-tag v-if="isManage(row.type)" class="default-tag">{{
3020
$t('views.resourceAuthorization.manage')
31-
}}</el-tag>
21+
}}</el-tag>
3222
</div>
3323
</div>
3424
</template>
@@ -40,20 +30,10 @@
4030
<div class="resource-authorization__table">
4131
<h4 class="mb-4">{{ $t('views.resourceAuthorization.permissionSetting') }}</h4>
4232
<el-tabs v-model="activeName" class="resource-authorization__tabs">
43-
<el-tab-pane
44-
v-for="(item, index) in settingTags"
45-
:key="item.value"
46-
:label="item.label"
47-
:name="item.value"
48-
>
49-
<PermissionSetting
50-
:key="index"
51-
:data="item.data"
52-
:type="item.value"
53-
:tableHeight="tableHeight"
54-
:manage="isManage(currentType)"
55-
@refreshData="refreshData"
56-
></PermissionSetting>
33+
<el-tab-pane v-for="(item, index) in settingTags" :key="item.value" :label="item.label"
34+
:name="item.value">
35+
<PermissionSetting :key="index" :data="item.data" :type="item.value" :tableHeight="tableHeight"
36+
:manage="isManage(currentType)" @refreshData="refreshData"></PermissionSetting>
5737
</el-tab-pane>
5838
</el-tabs>
5939
</div>
@@ -116,23 +96,31 @@ function isManage(type: string) {
11696
return type === 'manage'
11797
}
11898
99+
const flotTree = (tree: Array<any>, result: Array<any>) => {
100+
tree.forEach(tItem => {
101+
result.push(tItem)
102+
if (tItem.children) {
103+
flotTree(tItem.children, result)
104+
}
105+
})
106+
return result
107+
}
119108
function submitPermissions() {
120-
const obj: any = {
121-
user_resource_permission_list: [],
122-
}
123-
settingTags.map((item: any) => {
124-
item.data.map((v: any) => {
125-
obj['user_resource_permission_list'].push({
109+
const user_resource_permission_list = settingTags.map((item: any) => {
110+
return flotTree(item.data, []).filter((v: any) => !v.isFolder).map((v: any) => {
111+
return {
126112
target_id: v.id,
127-
auth_target_type: v.auth_target_type,
113+
auth_target_type: item.value,
128114
permission: v.permission,
129115
auth_type: 'RESOURCE_PERMISSION_GROUP',
130-
})
116+
}
131117
})
132-
})
133-
AuthorizationApi.putResourceAuthorization(currentUser.value, obj, rLoading).then(() => {
118+
}).reduce((pre, next) => {
119+
return [...pre, ...next]
120+
}, [])
121+
AuthorizationApi.putResourceAuthorization(currentUser.value, { user_resource_permission_list: user_resource_permission_list }, rLoading).then(() => {
134122
MsgSuccess(t('common.submitSuccess'))
135-
ResourcePermissions(currentUser.value)
123+
getWholeTree(currentUser.value)
136124
})
137125
}
138126

ui/src/views/tool/index.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
:currentNodeKey="currentFolder?.id"
99
@handleNodeClick="folderClickHandel"
1010
@refreshTree ="refreshFolder"
11-
shareTitle="views.system.share_tool"
11+
:shareTitle="hasPermission(new ComplexPermission(
12+
[RoleConst.ADMIN],[PermissionConst.SHARED_TOOL_READ],[EditionConst.IS_EE],'OR'
13+
), 'OR')?'views.system.share_tool':null"
1214
isShared
1315
class="p-8"
1416
/>
@@ -319,9 +321,10 @@ import { t } from '@/locales'
319321
import { isAppIcon } from '@/utils/common'
320322
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
321323
import SharedWorkspace from '@/views/shared/tool-shared/SharedWorkspace.vue'
322-
import { PermissionConst, RoleConst } from '@/utils/permission/data'
324+
import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
323325
import { hasPermission } from '@/utils/permission/index'
324326
import { FolderSource } from '@/enums/common'
327+
import { ComplexPermission } from '@/utils/permission/type'
325328
326329
const { folder, user } = useStore()
327330

0 commit comments

Comments
 (0)