提交 47f9ca83 authored 作者: taojinlong's avatar taojinlong

fix: 枚举值接口支持行权限

上级 2a4f3a76
...@@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -16,7 +16,7 @@ import javax.servlet.http.HttpServletRequest;
public class F2CLinkFilter extends AnonymousFilter { public class F2CLinkFilter extends AnonymousFilter {
private static final String LINK_TOKEN_KEY = "LINK-PWD-TOKEN"; public static final String LINK_TOKEN_KEY = "LINK-PWD-TOKEN";
@Override @Override
protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) { protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) {
......
...@@ -50,7 +50,6 @@ public class ShiroServiceImpl implements ShiroService { ...@@ -50,7 +50,6 @@ public class ShiroServiceImpl implements ShiroService {
filterChainDefinitionMap.put("/api/link/validate**", ANON); filterChainDefinitionMap.put("/api/link/validate**", ANON);
filterChainDefinitionMap.put("/api/map/areaEntitys/**", ANON); filterChainDefinitionMap.put("/api/map/areaEntitys/**", ANON);
filterChainDefinitionMap.put("/dataset/field/fieldValues/**", ANON); filterChainDefinitionMap.put("/dataset/field/fieldValues/**", ANON);
filterChainDefinitionMap.put("/dataset/field/multFieldValues", ANON);
filterChainDefinitionMap.put("/linkJump/queryPanelJumpInfo/**", ANON); filterChainDefinitionMap.put("/linkJump/queryPanelJumpInfo/**", ANON);
filterChainDefinitionMap.put("/tempMobileLink/**", ANON); filterChainDefinitionMap.put("/tempMobileLink/**", ANON);
...@@ -84,6 +83,7 @@ public class ShiroServiceImpl implements ShiroService { ...@@ -84,6 +83,7 @@ public class ShiroServiceImpl implements ShiroService {
filterChainDefinitionMap.put("/api/link/resourceDetail/**", "link"); filterChainDefinitionMap.put("/api/link/resourceDetail/**", "link");
filterChainDefinitionMap.put("/api/link/viewDetail/**", "link"); filterChainDefinitionMap.put("/api/link/viewDetail/**", "link");
filterChainDefinitionMap.put("/dataset/field/linkMultFieldValues", ANON);
filterChainDefinitionMap.put("/**", "authc"); filterChainDefinitionMap.put("/**", "authc");
......
package io.dataease.controller.dataset; package io.dataease.controller.dataset;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.auth.filter.F2CLinkFilter;
import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.DatasetTableField;
import io.dataease.controller.request.dataset.MultFieldValuesRequest;
import io.dataease.controller.response.DatasetTableField4Type; import io.dataease.controller.response.DatasetTableField4Type;
import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetFieldService;
import io.dataease.service.dataset.DataSetTableFieldsService; import io.dataease.service.dataset.DataSetTableFieldsService;
...@@ -10,8 +14,11 @@ import io.swagger.annotations.ApiOperation; ...@@ -10,8 +14,11 @@ import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
...@@ -75,18 +82,23 @@ public class DataSetTableFieldController { ...@@ -75,18 +82,23 @@ public class DataSetTableFieldController {
dataSetTableFieldsService.delete(id); dataSetTableFieldsService.delete(id);
} }
@ApiOperation("值枚举") @ApiOperation("多字段值枚举")
@PostMapping("fieldValues/{fieldId}") @PostMapping("linkMultFieldValues")
public List<Object> fieldValues(@PathVariable String fieldId) throws Exception { public List<Object> linkMultFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
return dataSetFieldService.fieldValues(fieldId); HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String linkToken = request.getHeader(F2CLinkFilter.LINK_TOKEN_KEY);
DecodedJWT jwt = JWT.decode(linkToken);
Long userId = jwt.getClaim("userId").asLong();
multFieldValuesRequest.setUserId(userId);
return multFieldValues(multFieldValuesRequest);
} }
@ApiOperation("多字段值枚举") @ApiOperation("多字段值枚举")
@PostMapping("multFieldValues") @PostMapping("multFieldValues")
public List<Object> multFieldValues(@RequestBody List<String> fieldIds) throws Exception { public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
List<Object> results = new ArrayList<>(); List<Object> results = new ArrayList<>();
for (String fieldId : fieldIds) { for (String fieldId : multFieldValuesRequest.getFieldIds()) {
results.addAll(dataSetFieldService.fieldValues(fieldId)); results.addAll(dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId()));
} }
ArrayList<Object> list = results.stream().collect( ArrayList<Object> list = results.stream().collect(
Collectors.collectingAndThen( Collectors.collectingAndThen(
......
package io.dataease.controller.panel.server; package io.dataease.controller.panel.server;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import io.dataease.auth.filter.F2CLinkFilter;
import io.dataease.base.domain.PanelLink; import io.dataease.base.domain.PanelLink;
import io.dataease.controller.panel.api.LinkApi; import io.dataease.controller.panel.api.LinkApi;
import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.chart.ChartExtRequest;
...@@ -14,8 +17,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -14,8 +17,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.Map; import java.util.Map;
...@@ -91,6 +97,11 @@ public class LinkServer implements LinkApi { ...@@ -91,6 +97,11 @@ public class LinkServer implements LinkApi {
@Override @Override
public Object viewDetail(String viewId, ChartExtRequest requestList) throws Exception { public Object viewDetail(String viewId, ChartExtRequest requestList) throws Exception {
HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String linkToken = request.getHeader(F2CLinkFilter.LINK_TOKEN_KEY);
DecodedJWT jwt = JWT.decode(linkToken);
Long userId = jwt.getClaim("userId").asLong();
requestList.setUser(userId);
return chartViewService.getData(viewId, requestList); return chartViewService.getData(viewId, requestList);
} }
......
package io.dataease.controller.request.dataset;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class MultFieldValuesRequest {
List<String> fieldIds = new ArrayList<>();
Long userId= null;
}
...@@ -5,5 +5,5 @@ import java.util.List; ...@@ -5,5 +5,5 @@ import java.util.List;
public interface DataSetFieldService { public interface DataSetFieldService {
List<Object> fieldValues(String fieldId) throws Exception; List<Object> fieldValues(String fieldId, Long userId) throws Exception;
} }
...@@ -456,17 +456,18 @@ public class DataSetTableService { ...@@ -456,17 +456,18 @@ public class DataSetTableService {
} }
RowPermissionService rowPermissionService = SpringContextUtil.getBean(RowPermissionService.class); RowPermissionService rowPermissionService = SpringContextUtil.getBean(RowPermissionService.class);
CurrentUserDto user = AuthUtils.getUser(); CurrentUserDto user = AuthUtils.getUser();
List<Long> roleIds; List<Long> roleIds = new ArrayList<>();
Long deptId; Long deptId = null;
if(user == null){ if(user == null && userId == null ){
SysUserEntity userEntity = authUserService.getUserById(userId); return datasetRowPermissions;
if(userEntity.getIsAdmin()){ }
return datasetRowPermissions;
} if(user != null && userId != null ){
deptId = userEntity.getDeptId(); return datasetRowPermissions;
roleIds = authUserService.roles(userId).stream().map(r -> Long.valueOf(r)).collect(Collectors.toList()); }
}else {
if(user != null){
if(user.getIsAdmin()){ if(user.getIsAdmin()){
return datasetRowPermissions; return datasetRowPermissions;
} }
...@@ -474,7 +475,16 @@ public class DataSetTableService { ...@@ -474,7 +475,16 @@ public class DataSetTableService {
deptId = user.getDeptId(); deptId = user.getDeptId();
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList()); roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
} }
userId = user != null ? user.getUserId() : userId;
if(userId != null){
SysUserEntity userEntity = authUserService.getUserById(userId);
if(userEntity.getIsAdmin()){
return datasetRowPermissions;
}
deptId = userEntity.getDeptId();
roleIds = authUserService.roles(userId).stream().map(r -> Long.valueOf(r)).collect(Collectors.toList());
}
DataSetRowPermissionsDTO dataSetRowPermissionsDTO = new DataSetRowPermissionsDTO(); DataSetRowPermissionsDTO dataSetRowPermissionsDTO = new DataSetRowPermissionsDTO();
dataSetRowPermissionsDTO.setDatasetId(datasetId); dataSetRowPermissionsDTO.setDatasetId(datasetId);
......
...@@ -42,7 +42,7 @@ public class DirectFieldService implements DataSetFieldService { ...@@ -42,7 +42,7 @@ public class DirectFieldService implements DataSetFieldService {
private DataSetTableUnionService dataSetTableUnionService; private DataSetTableUnionService dataSetTableUnionService;
@Override @Override
public List<Object> fieldValues(String fieldId) throws Exception{ public List<Object> fieldValues(String fieldId, Long userId) throws Exception{
List<DatasetTableField> list = dataSetTableFieldsService.getListByIds(new ArrayList<String>() {{ List<DatasetTableField> list = dataSetTableFieldsService.getListByIds(new ArrayList<String>() {{
add(fieldId); add(fieldId);
}}); }});
...@@ -58,7 +58,7 @@ public class DirectFieldService implements DataSetFieldService { ...@@ -58,7 +58,7 @@ public class DirectFieldService implements DataSetFieldService {
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(tableId).checked(Boolean.TRUE).build(); DatasetTableField datasetTableField = DatasetTableField.builder().tableId(tableId).checked(Boolean.TRUE).build();
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField); List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
List<ChartFieldCustomFilterDTO> customFilter = dataSetTableService.getCustomFilters(fields, datasetTable, null); List<ChartFieldCustomFilterDTO> customFilter = dataSetTableService.getCustomFilters(fields, datasetTable, userId);
DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceRequest datasourceRequest = new DatasourceRequest();
DatasourceProvider datasourceProvider = null; DatasourceProvider datasourceProvider = null;
......
...@@ -146,6 +146,15 @@ export function multFieldValues(data) { ...@@ -146,6 +146,15 @@ export function multFieldValues(data) {
}) })
} }
export function linkMultFieldValues(data) {
return request({
url: '/dataset/field/linkMultFieldValues',
method: 'post',
loading: true,
data
})
}
export function isKettleRunning(showLoading = true) { export function isKettleRunning(showLoading = true) {
return request({ return request({
url: '/dataset/group/isKettleRunning', url: '/dataset/group/isKettleRunning',
......
...@@ -28,8 +28,9 @@ ...@@ -28,8 +28,9 @@
</template> </template>
<script> <script>
import { multFieldValues } from '@/api/dataset/dataset' import { multFieldValues, linkMultFieldValues} from '@/api/dataset/dataset'
import bus from '@/utils/bus' import bus from '@/utils/bus'
import {getLinkToken, getToken} from "@/utils/auth";
export default { export default {
props: { props: {
...@@ -85,9 +86,16 @@ export default { ...@@ -85,9 +86,16 @@ export default {
'element.options.attrs.fieldId': function(value, old) { 'element.options.attrs.fieldId': function(value, old) {
if (typeof value === 'undefined' || value === old) return if (typeof value === 'undefined' || value === old) return
this.datas = [] this.datas = []
let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
this.element.options.attrs.fieldId && this.element.options.attrs.fieldId &&
this.element.options.attrs.fieldId.length > 0 && this.element.options.attrs.fieldId.length > 0 &&
multFieldValues(this.element.options.attrs.fieldId.split(',')).then(res => { method({fieldIds: this.element.options.attrs.fieldId.split(',')}).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
}) || (this.element.options.value = '') }) || (this.element.options.value = '')
}, },
...@@ -124,7 +132,13 @@ export default { ...@@ -124,7 +132,13 @@ export default {
this.value = this.fillValueDerfault() this.value = this.fillValueDerfault()
this.datas = [] this.datas = []
if (this.element.options.attrs.fieldId) { if (this.element.options.attrs.fieldId) {
multFieldValues(this.element.options.attrs.fieldId.split(',')).then(res => { let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
method({fieldIds: this.element.options.attrs.fieldId.split(',')}).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
}) })
} }
......
...@@ -36,9 +36,8 @@ ...@@ -36,9 +36,8 @@
</template> </template>
<script> <script>
import { import {multFieldValues, linkMultFieldValues} from '@/api/dataset/dataset'
multFieldValues import {getLinkToken, getToken} from "@/utils/auth";
} from '@/api/dataset/dataset'
export default { export default {
props: { props: {
...@@ -110,9 +109,15 @@ export default { ...@@ -110,9 +109,15 @@ export default {
'element.options.attrs.fieldId': function(value, old) { 'element.options.attrs.fieldId': function(value, old) {
if (typeof value === 'undefined' || value === old) return if (typeof value === 'undefined' || value === old) return
this.datas = [] this.datas = []
let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
this.element.options.attrs.fieldId && this.element.options.attrs.fieldId &&
this.element.options.attrs.fieldId.length > 0 && this.element.options.attrs.fieldId.length > 0 &&
multFieldValues(this.element.options.attrs.fieldId.split(',')).then(res => { method({fieldIds: this.element.options.attrs.fieldId.split(',')}).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
}) || (this.element.options.value = '') }) || (this.element.options.value = '')
}, },
...@@ -137,7 +142,13 @@ export default { ...@@ -137,7 +142,13 @@ export default {
initLoad() { initLoad() {
this.value = this.element.options.attrs.multiple ? [] : null this.value = this.element.options.attrs.multiple ? [] : null
if (this.element.options.attrs.fieldId) { if (this.element.options.attrs.fieldId) {
multFieldValues(this.element.options.attrs.fieldId.split(',')).then(res => { let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
method({fieldIds: this.element.options.attrs.fieldId.split(',')}).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
if (this.element.options.attrs.multiple) { if (this.element.options.attrs.multiple) {
this.checkAll = this.value.length === this.datas.length this.checkAll = this.value.length === this.datas.length
......
...@@ -239,7 +239,7 @@ export default { ...@@ -239,7 +239,7 @@ export default {
initEnumOptions() { initEnumOptions() {
// 查找枚举值 // 查找枚举值
if (this.item.deType === 0 || this.item.deType === 5) { if (this.item.deType === 0 || this.item.deType === 5) {
multFieldValues([this.item.id]).then(res => { multFieldValues({fieldIds: [this.item.id]}).then(res => {
this.fieldOptions = this.optionDatas(res.data) this.fieldOptions = this.optionDatas(res.data)
}) })
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论