forked from github/dataease
fix: 任务管理增加权限-> 用户只能管理拥有[管理权限]的数据集的任务
This commit is contained in:
parent
3db9e41108
commit
0a0a38c9d7
@ -10,12 +10,13 @@
|
|||||||
|
|
||||||
<resultMap id="TaskResult" type="io.dataease.dto.dataset.DataSetTaskDTO" extends="io.dataease.base.mapper.DatasetTableTaskMapper.BaseResultMap">
|
<resultMap id="TaskResult" type="io.dataease.dto.dataset.DataSetTaskDTO" extends="io.dataease.base.mapper.DatasetTableTaskMapper.BaseResultMap">
|
||||||
<result column="table_name" jdbcType="VARCHAR" property="datasetName"/>
|
<result column="table_name" jdbcType="VARCHAR" property="datasetName"/>
|
||||||
|
<result column="privileges" jdbcType="VARCHAR" property="privileges"/>
|
||||||
<result column="NEXT_FIRE_TIME" jdbcType="BIGINT" property="nextExecTime"/>
|
<result column="NEXT_FIRE_TIME" jdbcType="BIGINT" property="nextExecTime"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<select id="list" resultMap="BaseResult" parameterType="io.dataease.base.domain.DatasetTableTaskLog">
|
<select id="list" resultMap="BaseResult" parameterType="io.dataease.base.domain.DatasetTableTaskLog">
|
||||||
SELECT dataset_table_task_log.*, dataset_table_task.name, dataset_table.name as dataset_name
|
SELECT dataset_table_task_log.*, dataset_table_task.name, dataset_table.name as dataset_name
|
||||||
FROM dataset_table_task_log
|
FROM (select GET_V_AUTH_MODEL_WITH_PRIVILEGE (#{extendCondition}, 'dataset',1) cids) t, dataset_table_task_log
|
||||||
LEFT JOIN dataset_table_task ON dataset_table_task_log.task_id = dataset_table_task.id
|
LEFT JOIN dataset_table_task ON dataset_table_task_log.task_id = dataset_table_task.id
|
||||||
LEFT JOIN dataset_table ON dataset_table_task_log.table_id = dataset_table.id
|
LEFT JOIN dataset_table ON dataset_table_task_log.table_id = dataset_table.id
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
@ -30,8 +31,8 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="taskList" resultMap="TaskResult" parameterType="io.dataease.base.mapper.ext.query.GridExample">
|
<select id="taskList" resultMap="TaskResult" parameterType="io.dataease.base.mapper.ext.query.GridExample">
|
||||||
SELECT dataset_table.name as table_name, dataset_table_task.* , qrtz_triggers.*
|
SELECT dataset_table.name as table_name, get_auths(dataset_table_task.table_id,'dataset', #{extendCondition}) as `privileges`,dataset_table_task.* , qrtz_triggers.NEXT_FIRE_TIME
|
||||||
FROM dataset_table_task
|
FROM (select GET_V_AUTH_MODEL_WITH_PRIVILEGE (#{extendCondition}, 'dataset', 1) cids) t, dataset_table_task
|
||||||
left join dataset_table on dataset_table.id=dataset_table_task.table_id
|
left join dataset_table on dataset_table.id=dataset_table_task.table_id
|
||||||
left join qrtz_triggers on dataset_table_task.id=qrtz_triggers.TRIGGER_NAME
|
left join qrtz_triggers on dataset_table_task.id=qrtz_triggers.TRIGGER_NAME
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
|
@ -171,6 +171,9 @@ public class GridExample {
|
|||||||
case "not null":
|
case "not null":
|
||||||
addNotNullCriterion(field + " is not null ");
|
addNotNullCriterion(field + " is not null ");
|
||||||
break;
|
break;
|
||||||
|
case "extra":
|
||||||
|
addCriterion(field);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
@ -15,4 +15,5 @@ public class DataSetTaskDTO extends DatasetTableTask {
|
|||||||
private Long nextExecTime;
|
private Long nextExecTime;
|
||||||
private String taskStatus;
|
private String taskStatus;
|
||||||
private String msg;
|
private String msg;
|
||||||
|
private String privileges;
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import io.dataease.base.domain.DatasetTableTaskLogExample;
|
|||||||
import io.dataease.base.mapper.DatasetTableTaskLogMapper;
|
import io.dataease.base.mapper.DatasetTableTaskLogMapper;
|
||||||
import io.dataease.base.mapper.ext.ExtDataSetTaskMapper;
|
import io.dataease.base.mapper.ext.ExtDataSetTaskMapper;
|
||||||
import io.dataease.base.mapper.ext.query.GridExample;
|
import io.dataease.base.mapper.ext.query.GridExample;
|
||||||
|
import io.dataease.commons.utils.AuthUtils;
|
||||||
import io.dataease.controller.sys.base.BaseGridRequest;
|
import io.dataease.controller.sys.base.BaseGridRequest;
|
||||||
import io.dataease.controller.sys.base.ConditionEntity;
|
import io.dataease.controller.sys.base.ConditionEntity;
|
||||||
import io.dataease.dto.dataset.DataSetTaskDTO;
|
import io.dataease.dto.dataset.DataSetTaskDTO;
|
||||||
@ -56,10 +57,17 @@ public class DataSetTableTaskLogService {
|
|||||||
conditionEntities = new ArrayList<>();
|
conditionEntities = new ArrayList<>();
|
||||||
}
|
}
|
||||||
conditionEntities.add(entity);
|
conditionEntities.add(entity);
|
||||||
|
|
||||||
|
ConditionEntity entity2 = new ConditionEntity();
|
||||||
|
entity2.setOperator("extra");
|
||||||
|
entity2.setField(" FIND_IN_SET(dataset_table_task_log.table_id,cids) ");
|
||||||
|
conditionEntities.add(entity2);
|
||||||
|
|
||||||
request.setConditions(conditionEntities);
|
request.setConditions(conditionEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
GridExample gridExample = request.convertExample();
|
GridExample gridExample = request.convertExample();
|
||||||
|
gridExample.setExtendCondition(AuthUtils.getUser().getUserId().toString());
|
||||||
List<DataSetTaskLogDTO> dataSetTaskLogDTOS = extDataSetTaskMapper.list(gridExample);
|
List<DataSetTaskLogDTO> dataSetTaskLogDTOS = extDataSetTaskMapper.list(gridExample);
|
||||||
dataSetTaskLogDTOS.forEach(dataSetTaskLogDTO -> {
|
dataSetTaskLogDTOS.forEach(dataSetTaskLogDTO -> {
|
||||||
if(StringUtils.isEmpty(dataSetTaskLogDTO.getName())){
|
if(StringUtils.isEmpty(dataSetTaskLogDTO.getName())){
|
||||||
|
@ -10,6 +10,7 @@ import io.dataease.commons.constants.JobStatus;
|
|||||||
import io.dataease.commons.constants.ScheduleType;
|
import io.dataease.commons.constants.ScheduleType;
|
||||||
import io.dataease.commons.constants.TaskStatus;
|
import io.dataease.commons.constants.TaskStatus;
|
||||||
import io.dataease.commons.constants.TriggerType;
|
import io.dataease.commons.constants.TriggerType;
|
||||||
|
import io.dataease.commons.utils.AuthUtils;
|
||||||
import io.dataease.controller.request.dataset.DataSetTaskRequest;
|
import io.dataease.controller.request.dataset.DataSetTaskRequest;
|
||||||
import io.dataease.controller.sys.base.BaseGridRequest;
|
import io.dataease.controller.sys.base.BaseGridRequest;
|
||||||
import io.dataease.controller.sys.base.ConditionEntity;
|
import io.dataease.controller.sys.base.ConditionEntity;
|
||||||
@ -26,6 +27,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -213,7 +215,14 @@ public class DataSetTableTaskService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<DataSetTaskDTO> taskList(BaseGridRequest request) {
|
public List<DataSetTaskDTO> taskList(BaseGridRequest request) {
|
||||||
|
List<ConditionEntity> conditionEntities = request.getConditions() == null ? new ArrayList<>() : request.getConditions();
|
||||||
|
ConditionEntity entity = new ConditionEntity();
|
||||||
|
entity.setOperator("extra");
|
||||||
|
entity.setField(" FIND_IN_SET(dataset_table_task.table_id,cids) ");
|
||||||
|
conditionEntities.add(entity);
|
||||||
|
request.setConditions(conditionEntities);
|
||||||
GridExample gridExample = request.convertExample();
|
GridExample gridExample = request.convertExample();
|
||||||
|
gridExample.setExtendCondition(AuthUtils.getUser().getUserId().toString());
|
||||||
List<DataSetTaskDTO> dataSetTaskDTOS = extDataSetTaskMapper.taskList(gridExample);
|
List<DataSetTaskDTO> dataSetTaskDTOS = extDataSetTaskMapper.taskList(gridExample);
|
||||||
return dataSetTaskDTOS;
|
return dataSetTaskDTOS;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<de-container>
|
<de-container>
|
||||||
<de-aside-container>
|
<de-aside-container>
|
||||||
<dataset-group-selector-tree @getTable="getTable" :mode=mode :type=type :customType=customType :showMode=showMode />
|
<dataset-group-selector-tree @getTable="getTable" :privileges=privileges :mode=mode :type=type :customType=customType :showMode=showMode />
|
||||||
</de-aside-container>
|
</de-aside-container>
|
||||||
<de-main-container>
|
<de-main-container>
|
||||||
<dataset-table-data :table="table" />
|
<dataset-table-data :table="table" />
|
||||||
@ -45,6 +45,11 @@ export default {
|
|||||||
required: false,
|
required: false,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
privileges: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'use'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { isKettleRunning, post } from '@/api/dataset/dataset'
|
import { isKettleRunning, post } from '@/api/dataset/dataset'
|
||||||
import { authModel } from '@/api/system/sysAuth'
|
import { authModel } from '@/api/system/sysAuth'
|
||||||
|
import { hasDataPermission } from '@/utils/permission'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DatasetGroupSelectorTree',
|
name: 'DatasetGroupSelectorTree',
|
||||||
@ -112,6 +113,11 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: null
|
default: null
|
||||||
|
},
|
||||||
|
privileges: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'use'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -236,10 +242,12 @@ export default {
|
|||||||
mode: this.mode < 0 ? null : this.mode,
|
mode: this.mode < 0 ? null : this.mode,
|
||||||
typeFilter: this.customType ? this.customType : null
|
typeFilter: this.customType ? this.customType : null
|
||||||
}, false).then(response => {
|
}, false).then(response => {
|
||||||
this.tables = response.data
|
for (let i = 0; i < response.data.length; i++) {
|
||||||
for (let i = 0; i < this.tables.length; i++) {
|
if (response.data[i].mode === 1 && this.kettleRunning === false) {
|
||||||
if (this.tables[i].mode === 1 && this.kettleRunning === false) {
|
this.$set(response.data[i], 'disabled', true)
|
||||||
this.$set(this.tables[i], 'disabled', true)
|
}
|
||||||
|
if(hasDataPermission(this.privileges, response.data[i].privileges)){
|
||||||
|
this.tables.push(response.data[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.tableData = JSON.parse(JSON.stringify(this.tables))
|
this.tableData = JSON.parse(JSON.stringify(this.tables))
|
||||||
@ -350,14 +358,16 @@ export default {
|
|||||||
type: this.type,
|
type: this.type,
|
||||||
typeFilter: this.customType ? this.customType : null
|
typeFilter: this.customType ? this.customType : null
|
||||||
}, false).then(response => {
|
}, false).then(response => {
|
||||||
this.tables = response.data
|
for (let i = 0; i < response.data.length; i++) {
|
||||||
for (let i = 0; i < this.tables.length; i++) {
|
if (response.data[i].mode === 1 && this.kettleRunning === false) {
|
||||||
if (this.tables[i].mode === 1 && this.kettleRunning === false) {
|
this.$set(response.data[i], 'disabled', true)
|
||||||
this.$set(this.tables[i], 'disabled', true)
|
}
|
||||||
|
if(hasDataPermission(this.privileges, response.data[i].privileges)){
|
||||||
|
this.tables.push(response.data[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.tableData = JSON.parse(JSON.stringify(this.tables))
|
|
||||||
|
|
||||||
|
this.tableData = JSON.parse(JSON.stringify(this.tables))
|
||||||
this.$nextTick(function() {
|
this.$nextTick(function() {
|
||||||
this.unionDataChange()
|
this.unionDataChange()
|
||||||
})
|
})
|
||||||
|
@ -533,12 +533,7 @@ export default {
|
|||||||
this.incrementalConfig.incrementalDelete = this.sql
|
this.incrementalConfig.incrementalDelete = this.sql
|
||||||
}
|
}
|
||||||
this.incrementalConfig.tableId = this.table.id
|
this.incrementalConfig.tableId = this.table.id
|
||||||
let startTime = new Date(task.startTime).getTime()
|
task.startTime = new Date(task.startTime).getTime()
|
||||||
if(startTime < new Date().getTime()){
|
|
||||||
startTime = new Date().getTime()
|
|
||||||
}
|
|
||||||
task.startTime = startTime
|
|
||||||
|
|
||||||
task.endTime = new Date(task.endTime).getTime()
|
task.endTime = new Date(task.endTime).getTime()
|
||||||
task.tableId = this.table.id
|
task.tableId = this.table.id
|
||||||
const form = JSON.parse(JSON.stringify(task))
|
const form = JSON.parse(JSON.stringify(task))
|
||||||
|
@ -168,7 +168,7 @@
|
|||||||
|
|
||||||
<!--添加任务-选择数据集-->
|
<!--添加任务-选择数据集-->
|
||||||
<el-dialog v-dialogDrag :title="$t('dataset.task.create')" :visible="selectDatasetFlag" :show-close="false" width="70%" class="dialog-css" :destroy-on-close="true">
|
<el-dialog v-dialogDrag :title="$t('dataset.task.create')" :visible="selectDatasetFlag" :show-close="false" width="70%" class="dialog-css" :destroy-on-close="true">
|
||||||
<table-selector @getTable="getTable" :mode="1" :customType=customType showMode="datasetTask"/>
|
<table-selector @getTable="getTable" privileges="manage" :mode="1" :customType=customType showMode="datasetTask"/>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button size="mini" @click="closeCreateTask">{{ $t('chart.cancel') }}</el-button>
|
<el-button size="mini" @click="closeCreateTask">{{ $t('chart.cancel') }}</el-button>
|
||||||
<el-button type="primary" size="mini" :disabled="!table.id" @click="create(undefined)">{{ $t('chart.confirm') }}</el-button>
|
<el-button type="primary" size="mini" :disabled="!table.id" @click="create(undefined)">{{ $t('chart.confirm') }}</el-button>
|
||||||
@ -215,6 +215,7 @@ import 'codemirror/addon/hint/sql-hint'
|
|||||||
import 'codemirror/addon/hint/show-hint'
|
import 'codemirror/addon/hint/show-hint'
|
||||||
import cron from '@/components/cron/cron'
|
import cron from '@/components/cron/cron'
|
||||||
import TableSelector from '@/views/chart/view/TableSelector'
|
import TableSelector from '@/views/chart/view/TableSelector'
|
||||||
|
import { hasDataPermission } from '@/utils/permission'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DatasetTaskList',
|
name: 'DatasetTaskList',
|
||||||
@ -255,7 +256,7 @@ export default {
|
|||||||
label: this.$t('dataset.task.exec'), icon: 'el-icon-video-play', type: 'success', click: this.execTask, disabled: this.disableExec
|
label: this.$t('dataset.task.exec'), icon: 'el-icon-video-play', type: 'success', click: this.execTask, disabled: this.disableExec
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: this.$t('commons.delete'), icon: 'el-icon-delete', type: 'danger', click: this.deleteTask
|
label: this.$t('commons.delete'), icon: 'el-icon-delete', type: 'danger', click: this.deleteTask, disabled: this.disableDelete
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
searchConfig: {
|
searchConfig: {
|
||||||
@ -551,10 +552,14 @@ export default {
|
|||||||
this.taskForm.cron = val
|
this.taskForm.cron = val
|
||||||
},
|
},
|
||||||
disableEdit(task) {
|
disableEdit(task) {
|
||||||
return task.rate === 'SIMPLE' || task.status === 'Stopped'
|
return task.rate === 'SIMPLE' || task.status === 'Stopped' || !hasDataPermission('manage',task.privileges)
|
||||||
},
|
},
|
||||||
disableExec(task) {
|
disableExec(task) {
|
||||||
return task.status === 'Stopped' || task.status === 'Pending' || task.rate === 'SIMPLE'
|
return task.status === 'Stopped' || task.status === 'Pending' || task.rate === 'SIMPLE' || !hasDataPermission('manage',task.privileges)
|
||||||
|
},
|
||||||
|
disableDelete(task) {
|
||||||
|
return false;
|
||||||
|
// !hasDataPermission('manage',task.privileges)
|
||||||
},
|
},
|
||||||
deleteTask(task) {
|
deleteTask(task) {
|
||||||
this.$confirm(this.$t('dataset.confirm_delete'), this.$t('dataset.tips'), {
|
this.$confirm(this.$t('dataset.confirm_delete'), this.$t('dataset.tips'), {
|
||||||
@ -620,12 +625,7 @@ export default {
|
|||||||
}
|
}
|
||||||
this.incrementalConfig.tableId = task.tableId
|
this.incrementalConfig.tableId = task.tableId
|
||||||
}
|
}
|
||||||
|
task.startTime = new Date(task.startTime).getTime()
|
||||||
let startTime = new Date(task.startTime).getTime()
|
|
||||||
if(startTime < new Date().getTime()){
|
|
||||||
startTime = new Date().getTime()
|
|
||||||
}
|
|
||||||
task.startTime = startTime
|
|
||||||
task.endTime = new Date(task.endTime).getTime()
|
task.endTime = new Date(task.endTime).getTime()
|
||||||
const form = JSON.parse(JSON.stringify(task))
|
const form = JSON.parse(JSON.stringify(task))
|
||||||
form.extraData = JSON.stringify(form.extraData)
|
form.extraData = JSON.stringify(form.extraData)
|
||||||
|
Loading…
Reference in New Issue
Block a user