Skip to content

Commit daa8823

Browse files
committed
feat: Task source trigger permission
1 parent 7ba9ff8 commit daa8823

File tree

11 files changed

+257
-45
lines changed

11 files changed

+257
-45
lines changed

apps/trigger/serializers/task_source_trigger.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def one(self, with_valid=True):
107107
return {
108108
**TriggerModelSerializer(trigger).data,
109109
'trigger_task': trigger_task,
110-
'application_task': tool_task,
110+
'tool_task': tool_task,
111111
}
112112

113113
@transaction.atomic
@@ -137,7 +137,7 @@ def edit(self, instance: Dict, with_valid=True):
137137

138138
if need_redeploy:
139139
if trigger.is_active:
140-
deploy(ToolModelSerializer(trigger).data, **{})
140+
deploy(TriggerModelSerializer(trigger).data, **{})
141141
else:
142142
undeploy(TriggerModelSerializer(trigger).data, **{})
143143

ui/src/api/trigger/trigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ const putResourceTrigger: (
263263
data: TriggerData,
264264
loading?: Ref<boolean>,
265265
) => Promise<Result<any>> = (source_type, source_id, trigger_id, data, loading) => {
266-
return post(
266+
return put(
267267
`${prefixWorkspace.value}/${source_type}/${source_id}/trigger/${trigger_id}`,
268268
data,
269269
undefined,

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,20 @@
99
<AppIcon iconName="app-pricing" class="mr-8"></AppIcon>
1010
{{ $t('common.upgrade') }}
1111
</el-button>
12-
<el-tooltip effect="dark" :content="$t('views.trigger.title')" placement="top">
12+
<el-tooltip
13+
v-if="
14+
hasPermission(
15+
[
16+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
17+
PermissionConst.TRIGGER_READ.getWorkspacePermissionWorkspaceManageRole,
18+
],
19+
'OR',
20+
)
21+
"
22+
effect="dark"
23+
:content="$t('views.trigger.title')"
24+
placement="top"
25+
>
1326
<el-button
1427
text
1528
@click="router.push({ name: 'trigger' })"
@@ -68,7 +81,8 @@
6881
</template>
6982
<script setup lang="ts">
7083
import useStore from '@/stores'
71-
import { EditionConst, RoleConst } from '@/utils/permission/data'
84+
import { hasPermission } from '@/utils/permission'
85+
import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
7286
import { useRoute, useRouter } from 'vue-router'
7387
const route = useRoute()
7488
const router = useRouter()

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,38 @@ const systemManage = {
3232
],
3333
'OR'
3434
),
35+
trigger_read: () =>
36+
hasPermission(
37+
[
38+
RoleConst.ADMIN,
39+
PermissionConst.RESOURCE_APPLICATION_TRIGGER_READ
40+
],
41+
'OR'
42+
),
43+
trigger_create: () =>
44+
hasPermission(
45+
[
46+
RoleConst.ADMIN,
47+
PermissionConst.RESOURCE_APPLICATION_TRIGGER_CREATE
48+
],
49+
'OR'
50+
),
51+
trigger_edit: () =>
52+
hasPermission(
53+
[
54+
RoleConst.ADMIN,
55+
PermissionConst.RESOURCE_APPLICATION_TRIGGER_EDIT
56+
],
57+
'OR'
58+
),
59+
trigger_delete: () =>
60+
hasPermission(
61+
[
62+
RoleConst.ADMIN,
63+
PermissionConst.RESOURCE_APPLICATION_TRIGGER_DELETE
64+
],
65+
'OR'
66+
),
3567
debug: () =>
3668
hasPermission(
3769
[

ui/src/permission/application/workspace.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,46 @@ const workspace = {
9393
],
9494
'OR'
9595
),
96+
trigger_read: (source_id:string) =>
97+
hasPermission(
98+
[
99+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
100+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
101+
PermissionConst.APPLICATION_TRIGGER_READ.getWorkspacePermissionWorkspaceManageRole,
102+
PermissionConst.APPLICATION_TRIGGER_READ.getApplicationWorkspaceResourcePermission(source_id)
103+
],
104+
'OR'
105+
),
106+
trigger_create: (source_id:string) =>
107+
hasPermission(
108+
[
109+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
110+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
111+
PermissionConst.APPLICATION_TRIGGER_CREATE.getWorkspacePermissionWorkspaceManageRole,
112+
PermissionConst.APPLICATION_TRIGGER_CREATE.getApplicationWorkspaceResourcePermission(source_id)
113+
],
114+
'OR'
115+
),
116+
trigger_edit: (source_id:string) =>
117+
hasPermission(
118+
[
119+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
120+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
121+
PermissionConst.APPLICATION_TRIGGER_EDIT.getWorkspacePermissionWorkspaceManageRole,
122+
PermissionConst.APPLICATION_TRIGGER_EDIT.getApplicationWorkspaceResourcePermission(source_id)
123+
],
124+
'OR'
125+
),
126+
trigger_delete: (source_id:string) =>
127+
hasPermission(
128+
[
129+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
130+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
131+
PermissionConst.APPLICATION_TRIGGER_DELETE.getWorkspacePermissionWorkspaceManageRole,
132+
PermissionConst.APPLICATION_TRIGGER_DELETE.getApplicationWorkspaceResourcePermission(source_id)
133+
],
134+
'OR'
135+
),
96136
auth: (source_id:string) =>
97137
hasPermission(
98138
[

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,38 @@ const systemManage = {
3030
],
3131
'OR',
3232
),
33+
trigger_read: () =>
34+
hasPermission(
35+
[
36+
RoleConst.ADMIN,
37+
PermissionConst.RESOURCE_TOOL_TRIGGER_READ
38+
],
39+
'OR'
40+
),
41+
trigger_create: () =>
42+
hasPermission(
43+
[
44+
RoleConst.ADMIN,
45+
PermissionConst.RESOURCE_TOOL_TRIGGER_CREATE
46+
],
47+
'OR'
48+
),
49+
trigger_edit: () =>
50+
hasPermission(
51+
[
52+
RoleConst.ADMIN,
53+
PermissionConst.RESOURCE_TOOL_TRIGGER_EDIT
54+
],
55+
'OR'
56+
),
57+
trigger_delete: () =>
58+
hasPermission(
59+
[
60+
RoleConst.ADMIN,
61+
PermissionConst.RESOURCE_TOOL_TRIGGER_DELETE
62+
],
63+
'OR'
64+
),
3365
create: () => false,
3466
import: () => false,
3567
switch: () =>

ui/src/permission/tool/workspace.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,46 @@ const workspace = {
102102
],
103103
'OR',
104104
),
105+
trigger_read: (source_id:string) =>
106+
hasPermission(
107+
[
108+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
109+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
110+
PermissionConst.TOOL_TRIGGER_READ.getWorkspacePermissionWorkspaceManageRole,
111+
PermissionConst.TOOL_TRIGGER_READ.getApplicationWorkspaceResourcePermission(source_id)
112+
],
113+
'OR'
114+
),
115+
trigger_create: (source_id:string) =>
116+
hasPermission(
117+
[
118+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
119+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
120+
PermissionConst.TOOL_TRIGGER_CREATE.getWorkspacePermissionWorkspaceManageRole,
121+
PermissionConst.TOOL_TRIGGER_CREATE.getApplicationWorkspaceResourcePermission(source_id)
122+
],
123+
'OR'
124+
),
125+
trigger_edit: (source_id: string) =>
126+
hasPermission(
127+
[
128+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
129+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
130+
PermissionConst.TOOL_TRIGGER_EDIT.getWorkspacePermissionWorkspaceManageRole,
131+
PermissionConst.TOOL_TRIGGER_EDIT.getApplicationWorkspaceResourcePermission(source_id)
132+
],
133+
'OR'
134+
),
135+
trigger_delete: (source_id:string) =>
136+
hasPermission(
137+
[
138+
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
139+
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
140+
PermissionConst.TOOL_TRIGGER_DELETE.getWorkspacePermissionWorkspaceManageRole,
141+
PermissionConst.TOOL_TRIGGER_DELETE.getApplicationWorkspaceResourcePermission(source_id)
142+
],
143+
'OR'
144+
),
105145
switch: (source_id:string) =>
106146
hasPermission(
107147
[

ui/src/router/modules/trigger.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@ const ModelRouter = {
55
meta: {
66
title: 'views.trigger.title',
77
permission: [
8-
RoleConst.USER.getWorkspaceRole,
98
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
10-
PermissionConst.TOOL_READ.getWorkspacePermission,
11-
PermissionConst.TOOL_READ.getWorkspacePermissionWorkspaceManageRole,
9+
PermissionConst.TRIGGER_READ.getWorkspacePermissionWorkspaceManageRole,
1210
],
1311
group: 'workspace',
1412
order: 5,

ui/src/views/application/index.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,11 @@
247247
</el-dropdown-item>
248248
<el-dropdown-item
249249
@click.stop="openTriggerDrawer(item)"
250-
v-if="apiType === 'workspace'"
250+
v-if="
251+
apiType === 'workspace' &&
252+
item.is_publish &&
253+
permissionPrecise.trigger_read(item.id)
254+
"
251255
>
252256
<AppIcon iconName="app-trigger" class="color-secondary"></AppIcon>
253257
{{ $t('views.trigger.title') }}

ui/src/views/trigger/ResourceTriggerDrawer.vue

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
<h4 class="title-decoration-1 mb-16 mt-16">
88
{{ $t('views.trigger.title') }}
99
</h4>
10-
<el-button link type="primary" @click="openCreateTriggerDrawer()">
10+
<el-button
11+
v-if="permissionPrecise.trigger_create(toolId)"
12+
link
13+
type="primary"
14+
@click="openCreateTriggerDrawer()"
15+
>
1116
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
1217
{{ $t('common.add') }}
1318
</el-button>
@@ -30,7 +35,11 @@
3035
</el-button>
3136
</span>
3237

33-
<el-button text @click="removeTrigger(item)">
38+
<el-button
39+
v-if="permissionPrecise.trigger_delete(toolId)"
40+
text
41+
@click="removeTrigger(item)"
42+
>
3443
<el-icon><Close /></el-icon>
3544
</el-button>
3645
</div>
@@ -54,23 +63,29 @@ import { ref, computed } from 'vue'
5463
import { useRoute } from 'vue-router'
5564
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
5665
import TriggerDrawer from '@/views/trigger/TriggerDrawer.vue'
66+
import permissionMap from '@/permission'
5767
import triggerAPI from '@/api/trigger/trigger'
5868
import { getTriggerCycleLabel } from '@/utils/trigger'
59-
const route = useRoute()
6069
6170
const props = defineProps<{
6271
source: string
6372
}>()
73+
74+
const route = useRoute()
6475
const apiType = computed(() => {
65-
if (route.path.includes('shared')) {
66-
return 'systemShare'
67-
} else if (route.path.includes('resource-management')) {
76+
if (route.path.includes('resource-management')) {
6877
return 'systemManage'
6978
} else {
7079
return 'workspace'
7180
}
7281
})
7382
83+
const permissionPrecise = computed(() => {
84+
return permissionMap[props.source.toLowerCase() as 'application' | 'tool'][
85+
apiType.value as 'workspace' | 'systemManage'
86+
]
87+
})
88+
7489
const toolId = ref<string>('')
7590
const visible = ref<boolean>(false)
7691
const loading = ref<boolean>(false)
@@ -97,7 +112,7 @@ const openCreateTriggerDrawer = () => {
97112
triggerDrawerRef.value?.open(undefined, props.source, toolId.value)
98113
}
99114
const openEditTriggerDrawer = (trigger: any) => {
100-
triggerDrawerRef.value?.open(trigger.id)
115+
triggerDrawerRef.value?.open(trigger.id, props.source, toolId.value)
101116
}
102117
103118
function getTriggerList() {

0 commit comments

Comments
 (0)