提交 cc14b0f3 authored 作者: junjie's avatar junjie

feat: 视图数据集权限控制

上级 27ae5d04
......@@ -7,4 +7,6 @@ import java.util.List;
public interface ExtDataSetTableMapper {
List<DataSetTableDTO> search(DataSetTableRequest request);
DataSetTableDTO searchOne(DataSetTableRequest request);
}
......@@ -7,6 +7,33 @@
<result column="privileges" property="privileges"/>
</resultMap>
<select id="searchOne" resultMap="BaseResultMapDTO">
select
id, `name`, scene_id, data_source_id, `type`, `mode`,`info`, create_by, create_time,
get_auths(id,'dataset',#{userId}) as `privileges`
from (select GET_V_AUTH_MODEL_ID_P_USE (#{userId}, 'dataset') cids) t,dataset_table
<where>
FIND_IN_SET(dataset_table.id,cids)
<if test="id != null">
and id = #{id,jdbcType=VARCHAR}
</if>
<if test="sceneId != null">
and scene_id = #{sceneId,jdbcType=VARCHAR}
</if>
<if test="mode != null">
and mode = #{mode,jdbcType=INTEGER}
</if>
<if test="typeFilter != null">
and type in
<foreach collection="typeFilter" item="item" open="(" separator="," close=")">
#{item,jdbcType=INTEGER}
</foreach>
</if>
</where>
<if test="sort != null">
order by ${sort}
</if>
</select>
<select id="search" resultMap="BaseResultMapDTO">
select
......@@ -31,7 +58,5 @@
<if test="sort != null">
order by ${sort}
</if>
</select>
</mapper>
......@@ -54,6 +54,11 @@ public class DataSetTableController {
return dataSetTableService.get(id);
}
@PostMapping("getWithPermission/{id}")
public DataSetTableDTO getWithPermission(@PathVariable String id) {
return dataSetTableService.getWithPermission(id);
}
@PostMapping("getFields")
public List<TableFiled> getFields(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception {
return dataSetTableService.getFields(dataSetTableRequest);
......
......@@ -215,6 +215,14 @@ public class DataSetTableService {
return datasetTableMapper.selectByPrimaryKey(id);
}
public DataSetTableDTO getWithPermission(String id) {
DataSetTableRequest dataSetTableRequest = new DataSetTableRequest();
dataSetTableRequest.setId(id);
dataSetTableRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId()));
dataSetTableRequest.setTypeFilter(dataSetTableRequest.getTypeFilter());
return extDataSetTableMapper.searchOne(dataSetTableRequest);
}
public List<TableFiled> getFields(DataSetTableRequest dataSetTableRequest) throws Exception {
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
......
......@@ -17,7 +17,7 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item">{{ $t('chart.background') }}<i class="el-icon-setting el-icon--right" /></el-button>
<el-button slot="reference" :disabled="param && !hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.background') }}<i class="el-icon-setting el-icon--right" /></el-button>
</el-popover>
</div>
</div>
......@@ -29,6 +29,10 @@ import { DEFAULT_BACKGROUND_COLOR } from '../../chart/chart'
export default {
name: 'BackgroundColorSelector',
props: {
param: {
type: Object,
required: false
},
chart: {
type: Object,
required: true
......
......@@ -53,10 +53,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!legendForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!legendForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.legend') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="legendForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeLegendStyle"
......@@ -73,6 +74,10 @@ import { DEFAULT_LEGEND_STYLE } from '../../chart/chart'
export default {
name: 'LegendSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -48,7 +48,7 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item">
<el-button slot="reference" :disabled="!hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">
{{ $t('chart.split') }}<i class="el-icon-setting el-icon--right" />
</el-button>
</el-popover>
......@@ -62,6 +62,10 @@ import { DEFAULT_SPLIT } from '../../chart/chart'
export default {
name: 'SplitSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -51,10 +51,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!titleForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!titleForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.title') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="titleForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeTitleStyle"
......@@ -71,6 +72,10 @@ import { DEFAULT_TITLE_STYLE } from '../../chart/chart'
export default {
name: 'TitleSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -72,10 +72,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.xAxis') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="axisForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeXAxisStyle"
......@@ -92,6 +93,10 @@ import { DEFAULT_XAXIS_STYLE } from '../../chart/chart'
export default {
name: 'XAxisSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -72,10 +72,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!axisForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.yAxis') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="axisForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeYAxisStyle"
......@@ -92,6 +93,10 @@ import { DEFAULT_YAXIS_STYLE } from '../../chart/chart'
export default {
name: 'YAxisSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -5,7 +5,7 @@
<el-tag size="small" class="item-axis">
{{ item.name }}<i class="el-icon-arrow-down el-icon--right" />
</el-tag>
<el-dropdown-menu slot="dropdown">
<el-dropdown-menu v-if="hasDataPermission('manage',param.privileges)" slot="dropdown">
<el-dropdown-item>
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="sort">
<span class="el-dropdown-link inner-dropdown-menu">
......@@ -80,6 +80,10 @@
export default {
name: 'DimensionItem',
props: {
param: {
type: Object,
required: true
},
item: {
type: Object,
required: true
......
<template>
<span>
<el-dropdown trigger="click" size="mini" @command="clickItem">
<el-dropdown trigger="click" size="mini" :disabled="!hasDataPermission('manage',param.privileges)" @command="clickItem">
<span class="el-dropdown-link">
<el-tag size="small" class="item-axis">
<span>{{ item.name }}</span>
<span v-if="item.summary" class="summary-span">{{ $t('chart.'+item.summary) }}</span>
<i class="el-icon-arrow-down el-icon--right" />
</el-tag>
<el-dropdown-menu slot="dropdown">
<el-dropdown-menu v-if="hasDataPermission('manage',param.privileges)" slot="dropdown">
<el-dropdown-item>
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="summary">
<span class="el-dropdown-link inner-dropdown-menu">
......@@ -81,6 +81,10 @@
export default {
name: 'QuotaItem',
props: {
param: {
type: Object,
required: true
},
item: {
type: Object,
required: true
......
......@@ -49,7 +49,7 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item">{{ $t('chart.color') }}<i class="el-icon-setting el-icon--right" /></el-button>
<el-button slot="reference" :disabled="param && !hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.color') }}<i class="el-icon-setting el-icon--right" /></el-button>
</el-popover>
</div>
</div>
......@@ -61,6 +61,10 @@ import { DEFAULT_COLOR_CASE } from '../../chart/chart'
export default {
name: 'ColorSelector',
props: {
param: {
type: Object,
required: false
},
chart: {
type: Object,
required: true
......
......@@ -67,10 +67,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!labelForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!labelForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.label') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="labelForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeLabelAttr"
......@@ -87,6 +88,10 @@ import { DEFAULT_LABEL } from '../../chart/chart'
export default {
name: 'LabelSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -143,7 +143,7 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item">{{ $t('chart.size') }}<i class="el-icon-setting el-icon--right" /></el-button>
<el-button slot="reference" :disabled="!hasDataPermission('manage',param.privileges)" size="mini" class="shape-item">{{ $t('chart.size') }}<i class="el-icon-setting el-icon--right" /></el-button>
</el-popover>
</div>
</div>
......@@ -154,6 +154,10 @@ import { DEFAULT_SIZE } from '../../chart/chart'
export default {
name: 'SizeSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -55,10 +55,11 @@
</el-form>
</el-col>
<el-button slot="reference" size="mini" class="shape-item" :disabled="!tooltipForm.show">
<el-button slot="reference" size="mini" class="shape-item" :disabled="!tooltipForm.show || !hasDataPermission('manage',param.privileges)">
{{ $t('chart.tooltip') }}<i class="el-icon-setting el-icon--right" />
<el-switch
v-model="tooltipForm.show"
:disabled="!hasDataPermission('manage',param.privileges)"
class="switch-style"
@click.stop.native
@change="changeTooltipAttr"
......@@ -75,6 +76,10 @@ import { DEFAULT_TOOLTIP } from '../../chart/chart'
export default {
name: 'TooltipSelector',
props: {
param: {
type: Object,
required: true
},
chart: {
type: Object,
required: true
......
......@@ -689,7 +689,7 @@ export default {
nodeClick(data, node) {
if (data.type !== 'group') {
this.$emit('switchComponent', { name: 'ChartEdit', param: { 'id': data.id }})
this.$emit('switchComponent', { name: 'ChartEdit', param: data })
}
// if (data.type === 'scene') {
// this.sceneMode = true
......
......@@ -77,6 +77,10 @@ export default {
type: Object,
required: true
},
param: {
type: Object,
required: true
},
fields: {
type: Array,
required: true
......
<template>
<el-row>
<el-button size="mini" @click="showUnionEdit">{{ $t('dataset.add_union') }}</el-button>
<el-button v-if="hasDataPermission('manage',param.privileges)" size="mini" @click="showUnionEdit">{{ $t('dataset.add_union') }}</el-button>
<el-row>
<el-table
size="mini"
......@@ -34,8 +34,8 @@
:label="$t('dataset.operate')"
>
<template slot-scope="scope">
<el-button type="text" size="mini" @click="edit(scope.row)">{{ $t('dataset.edit') }}</el-button>
<el-button type="text" size="mini" @click="deleteUnion(scope.row)">{{ $t('dataset.delete') }}</el-button>
<el-button v-if="hasDataPermission('manage',param.privileges)" type="text" size="mini" @click="edit(scope.row)">{{ $t('dataset.edit') }}</el-button>
<el-button v-if="hasDataPermission('manage',param.privileges)" type="text" size="mini" @click="deleteUnion(scope.row)">{{ $t('dataset.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -143,6 +143,10 @@ export default {
table: {
type: Object,
required: true
},
param: {
type: Object,
required: true
}
},
data() {
......
<template>
<el-col>
<el-row>
<el-button icon="el-icon-setting" size="mini" @click="showConfig">
<el-button v-if="hasDataPermission('manage',param.privileges)" icon="el-icon-setting" size="mini" @click="showConfig">
{{ $t('dataset.update_setting') }}
</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="refreshLog">
......@@ -302,6 +302,10 @@ export default {
table: {
type: Object,
default: null
},
param: {
type: Object,
required: true
}
},
data() {
......
<template>
<el-row style="height: 100%;overflow-y: hidden;width: 100%;">
<!-- <span v-show="false">{{ tableRefresh }}</span>-->
<!-- <span v-show="false">{{ tableRefresh }}</span>-->
<el-row style="height: 26px;">
<el-popover
placement="right-start"
......@@ -14,7 +14,7 @@
{{ table.name }}
</span>
</el-popover>
<el-row style="float: right">
<el-row v-if="hasDataPermission('manage',param.privileges)" style="float: right">
<el-dropdown v-if="table.type ==='excel'" style="margin-right: 10px;" size="small" trigger="click" @command="clickEditExcel">
<el-button size="mini">
{{ $t('dataset.edit_excel') }}
......@@ -46,13 +46,13 @@
<el-tabs v-model="tabActive">
<el-tab-pane :label="$t('dataset.data_preview')" name="dataPreview">
<tab-data-preview :table="table" :fields="fields" :data="data" :page="page" :form="tableViewRowForm" @reSearch="reSearch" />
<tab-data-preview :param="param" :table="table" :fields="fields" :data="data" :page="page" :form="tableViewRowForm" @reSearch="reSearch" />
</el-tab-pane>
<el-tab-pane v-if="table.type !== 'custom' && table.mode === 1" :label="$t('dataset.join_view')" name="joinView">
<union-view :table="table" />
<union-view :param="param" :table="table" />
</el-tab-pane>
<el-tab-pane v-if="table.mode === 1 && (table.type === 'db' || table.type === 'sql')" :label="$t('dataset.update_info')" name="updateInfo">
<update-info :table="table" />
<update-info :param="param" :table="table" />
</el-tab-pane>
</el-tabs>
</el-row>
......@@ -70,7 +70,7 @@ export default {
components: { UnionView, DatasetChartDetail, UpdateInfo, TabDataPreview },
props: {
param: {
type: String,
type: Object,
required: true
}
},
......@@ -101,14 +101,14 @@ export default {
},
watch: {
'param': function() {
this.initTable(this.param)
this.initTable(this.param.id)
}
},
created() {
},
mounted() {
this.initTable(this.param)
this.initTable(this.param.id)
},
methods: {
initTable(id) {
......
......@@ -672,7 +672,7 @@ export default {
// }
if (data.type !== 'group') {
this.$emit('switchComponent', { name: 'ViewTable', param: data.id })
this.$emit('switchComponent', { name: 'ViewTable', param: data })
}
// if (node.expanded) {
// this.expandedArray.push(data.id)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论