Skip to content

Commit d26195e

Browse files
committed
fixed #547
1 parent ee13190 commit d26195e

File tree

4 files changed

+229
-6
lines changed

4 files changed

+229
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
*
3+
* * Copyright 2019 WeBank
4+
* *
5+
* * Licensed under the Apache License, Version 2.0 (the "License");
6+
* * you may not use this file except in compliance with the License.
7+
* * You may obtain a copy of the License at
8+
* *
9+
* * http://www.apache.org/licenses/LICENSE-2.0
10+
* *
11+
* * Unless required by applicable law or agreed to in writing, software
12+
* * distributed under the License is distributed on an "AS IS" BASIS,
13+
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* * See the License for the specific language governing permissions and
15+
* * limitations under the License.
16+
*
17+
*/
18+
19+
package com.webank.wedatasphere.dss.apiservice.core.dao;
20+
21+
22+
import com.webank.wedatasphere.dss.apiservice.core.vo.ApprovalVo;
23+
import org.apache.ibatis.annotations.Param;
24+
25+
import java.util.List;
26+
27+
/**
28+
* @author: jinyangrao
29+
* @date: 2020-08-26 18:03:34
30+
*/
31+
public interface ApiServiceApprovalDao {
32+
33+
/**
34+
* 新增一条审批单
35+
*/
36+
void insert(ApprovalVo approvalVo);
37+
38+
/**
39+
* 查询审批单
40+
* */
41+
List<ApprovalVo> queryByApprovalNo(@Param("approvalNo") String approvalNo);
42+
43+
/**
44+
* set status to success
45+
* */
46+
void setApprovalStatusSuccess(@Param("approvalNo") String approvalNo);
47+
48+
/**
49+
* set status to failed
50+
* */
51+
void setApprovalStatusFailed(@Param("approvalNo") String approvalNo);
52+
53+
/**
54+
* set status to init
55+
* */
56+
void setApprovalStatusInit(@Param("approvalNo") String approvalNo);
57+
58+
/**
59+
* set status to applying
60+
* */
61+
void setApprovalStatusApplying(@Param("approvalNo") String approvalNo);
62+
63+
/**
64+
* update status
65+
* */
66+
void updateApprovalStatus(@Param("approvalNo") String approvalNo, @Param("status") Integer status);
67+
68+
69+
/**
70+
* delete approval
71+
* */
72+
void deleteApproval(@Param("approvalNo") String approvalNo);
73+
74+
/**
75+
* 通过版本ID查询审批单
76+
* */
77+
ApprovalVo queryByVersionId(@Param("apiVersionId") Long apiVersionId);
78+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
~ /*
4+
~ * Copyright 2019 WeBank
5+
~ *
6+
~ * Licensed under the Apache License, Version 2.0 (the "License");
7+
~ * you may not use this file except in compliance with the License.
8+
~ * You may obtain a copy of the License at
9+
~ *
10+
~ * http://www.apache.org/licenses/LICENSE-2.0
11+
~ *
12+
~ * Unless required by applicable law or agreed to in writing, software
13+
~ * distributed under the License is distributed on an "AS IS" BASIS,
14+
~ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
~ * See the License for the specific language governing permissions and
16+
~ * limitations under the License.
17+
~ */
18+
-->
19+
20+
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
21+
<mapper namespace="com.webank.wedatasphere.dss.apiservice.core.dao.ApiServiceApprovalDao">
22+
23+
<resultMap id="approvalMap" type="com.webank.wedatasphere.dss.apiservice.core.vo.ApprovalVo">
24+
<result property="id" column="id"/>
25+
<result property="apiId" column="api_id"/>
26+
<result property="apiVersionId" column="api_version_id"/>
27+
<result property="approvalName" column="approval_name"/>
28+
<result property="applyUser" column="apply_user"/>
29+
<result property="executeUser" column="execute_user"/>
30+
<result property="creator" column="creator"/>
31+
<result property="status" column="status"/>
32+
<result property="createTime" column="create_time"/>
33+
<result property="updateTime" column="update_time"/>
34+
<result property="approvalNo" column="approval_no"/>
35+
</resultMap>
36+
37+
<sql id="fields">
38+
`api_id`, `api_version_id`, `approval_name`, `apply_user`, `execute_user`, `creator`,
39+
`status`, `create_time`, `update_time`, `approval_no`
40+
</sql>
41+
42+
<sql id="fields_query">
43+
`id`, `api_version_id`, `api_id`, `approval_name`, `apply_user`, `execute_user`, `creator`,
44+
`status`, `create_time`, `update_time`, `approval_no`
45+
</sql>
46+
47+
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.webank.wedatasphere.dss.apiservice.core.vo.ApprovalVo">
48+
<![CDATA[INSERT INTO `dss_apiservice_approval`(]]>
49+
<include refid="fields"/>
50+
<![CDATA[) VALUES(#{apiId}, #{apiVersionId}, #{approvalName}, #{applyUser}, #{executeUser}, #{creator},
51+
#{status}, #{createTime}, #{updateTime}, #{approvalNo})]]>
52+
</insert>
53+
54+
<select id="queryByApprovalNo" parameterType="java.lang.String" resultMap="approvalMap">
55+
<![CDATA[SELECT]]>
56+
<include refid="fields_query"/>
57+
<![CDATA[ FROM `dss_apiservice_approval` ]]>
58+
<where>
59+
`approval_no` = #{approvalNo}
60+
</where>
61+
</select>
62+
63+
<update id="setApprovalStatusSuccess" parameterType="java.lang.String">
64+
UPDATE `dss_apiservice_approval`
65+
SET `status` = 3
66+
WHERE `approval_no` = #{approvalNo}
67+
</update>
68+
69+
<update id="setApprovalStatusFailed" parameterType="java.lang.String">
70+
UPDATE `dss_apiservice_approval`
71+
SET `status` = 4
72+
WHERE `approval_no` = #{approvalNo}
73+
</update>
74+
75+
<update id="setApprovalStatusInit" parameterType="java.lang.String">
76+
UPDATE `dss_apiservice_approval`
77+
SET `status` = 1
78+
WHERE `approval_no` = #{approvalNo}
79+
</update>
80+
81+
<update id="setApprovalStatusApplying" parameterType="java.lang.String">
82+
UPDATE `dss_apiservice_approval`
83+
SET `status` = 2
84+
WHERE `approval_no` = #{approvalNo}
85+
</update>
86+
87+
<update id="updateApprovalStatus">
88+
UPDATE `dss_apiservice_approval`
89+
SET `status` = #{status}
90+
WHERE `approval_no` = #{approvalNo}
91+
</update>
92+
93+
<delete id="deleteApproval" parameterType="java.lang.String">
94+
DELETE FROM
95+
`dss_apiservice_approval`
96+
WHERE `approval_no` = #{approvalNo}
97+
</delete>
98+
99+
<select id="queryByVersionId" parameterType="java.lang.Long" resultMap="approvalMap">
100+
<![CDATA[SELECT]]>
101+
<include refid="fields_query"/>
102+
<![CDATA[ FROM `dss_apiservice_approval` ]]>
103+
<where>
104+
`api_version_id` = #{apiVersionId}
105+
</where>
106+
</select>
107+
108+
109+
</mapper>

dss-apps/dss-apiservice-server/src/main/java/com/webank/wedatasphere/dss/apiservice/core/service/impl/ApiServiceImpl.java

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ public class ApiServiceImpl implements ApiService {
7878
@Autowired
7979
private ApiServiceTokenManagerDao apiServiceTokenManagerDao;
8080

81+
@Autowired
82+
ApiServiceApprovalDao apiServiceApprovalDao;
83+
8184
@Autowired
8285
TokenAuth tokenAuth;
8386

@@ -137,9 +140,7 @@ public void save(ApiServiceVo apiService) throws Exception {
137140
//todo update by query
138141
apiVersionVo.setMetadataInfo("default");
139142
apiServiceVersionDao.insert(apiVersionVo);
140-
141-
142-
143+
addApprovalToDB(apiService,apiVersionVo.getId(),apiVersionVo.getAuthId());
143144
// insert linkis_oneservice_params
144145
List<ParamVo> params = apiService.getParams();
145146
if (params != null && !params.isEmpty()) {
@@ -200,7 +201,7 @@ public void saveByApp(ApiServiceVo apiService) throws Exception {
200201
//顺序不能改变,版本信息依赖审批单信息
201202
apiServiceVersionDao.insert(apiVersionVo);
202203

203-
// addApprovalToDB(apiService,apiVersionVo.getId(),apiVersionVo.getAuthId());
204+
addApprovalToDB(apiService,apiVersionVo.getId(),apiVersionVo.getAuthId());
204205

205206
// insert linkis_oneservice_params
206207
List<ParamVo> params = apiService.getParams();
@@ -285,7 +286,7 @@ public void update(ApiServiceVo apiService) throws Exception {
285286
}
286287
}
287288

288-
// addApprovalToDB(apiService, apiServiceVersionVo.getId(), apiServiceVersionVo.getAuthId());
289+
addApprovalToDB(apiService, apiServiceVersionVo.getId(), apiServiceVersionVo.getAuthId());
289290

290291
//insert a token record for self
291292
genTokenForPublisher(apiService, apiServiceVersionVo.getId());
@@ -305,6 +306,26 @@ public void update(ApiServiceVo apiService) throws Exception {
305306
}
306307
}
307308

309+
public void addApprovalToDB(ApiServiceVo apiService, Long apiVersionId, String approvalNumber) {
310+
311+
ApprovalVo approvalVo = apiService.getApprovalVo();
312+
// 需要插入审批单记录
313+
approvalVo.setApiId(apiService.getId() != null ? apiService.getId() : 0);
314+
approvalVo.setApiVersionId(apiVersionId != null ? apiVersionId : 0);
315+
approvalVo.setApprovalNo(approvalNumber != null ? approvalNumber : "");
316+
approvalVo.setCreator(apiService.getCreator() != null ? apiService.getCreator() : "");
317+
approvalVo.setStatus(3);
318+
approvalVo.setCreateTime(new Date());
319+
approvalVo.setUpdateTime(new Date());
320+
if (StringUtils.isEmpty(approvalVo.getExecuteUser())) {
321+
approvalVo.setExecuteUser(approvalVo.getCreator());
322+
}
323+
if (approvalVo.getApprovalName() == null) {
324+
approvalVo.setApprovalName("");
325+
}
326+
apiServiceApprovalDao.insert(approvalVo);
327+
}
328+
308329
@Override
309330
public List<ApiServiceVo> query(ApiServiceQuery apiServiceQuery) throws ApiServiceQueryException {
310331
//todo 查询需要优化,量小时不影响效率
@@ -348,6 +369,11 @@ public List<ApiServiceVo> query(ApiServiceQuery apiServiceQuery) throws ApiServi
348369
@Override
349370
public List<ApiServiceVo> queryByWorkspaceId(Integer workspaceId, String userName){
350371
List<ApiServiceVo> result = apiServiceDao.queryByWorkspaceId(workspaceId,userName);
372+
result.stream().forEach(apiServiceVo -> {
373+
ApiVersionVo apiVersionVo = getMaxVersion(apiServiceVo.getId());
374+
ApprovalVo approvalVo =apiServiceApprovalDao.queryByVersionId(apiVersionVo.getId());
375+
apiServiceVo.setApprovalVo(approvalVo);
376+
});
351377
return result;
352378
}
353379

dss-apps/dss-apiservice-server/src/main/java/com/webank/wedatasphere/dss/apiservice/core/service/impl/ApiServiceQueryServiceImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ public class ApiServiceQueryServiceImpl implements ApiServiceQueryService {
149149
@Autowired
150150
private ApiServiceAccessDao apiServiceAccessDao;
151151

152+
@Autowired
153+
private ApiServiceApprovalDao apiServiceApprovalDao;
154+
152155
/**
153156
* Bml client
154157
*/
@@ -244,6 +247,8 @@ public LinkisExecuteResult query(String path,
244247

245248
// AssertUtil.isTrue(MapUtils.isNotEmpty((Map) collect.getKey()), "数据源不能为空");
246249

250+
//获取代理执行用户
251+
ApprovalVo approvalVo = apiServiceApprovalDao.queryByVersionId(maxApiVersionVo.getId());
247252

248253
ApiServiceExecuteJob job = new DefaultApiServiceJob();
249254
//sql代码封装成scala执行
@@ -253,7 +258,12 @@ public LinkisExecuteResult query(String path,
253258
//不允许创建用户自己随意代理执行,创建用户只能用自己用户执行
254259
//如果需要代理执行可以在这里更改用户
255260
job.setUser(loginUser);
256-
261+
if( !apiServiceVo.getCreator().equals(loginUser) && StringUtils.isNotEmpty(approvalVo.getExecuteUser())){
262+
if("hadoop".equals(approvalVo.getExecuteUser().toLowerCase())){
263+
throw new ApiServiceRuntimeException("非法使用Hadoop用户作为执行用户");
264+
}
265+
job.setUser(approvalVo.getExecuteUser());
266+
}
257267
job.setParams(null);
258268
job.setRuntimeParams(reqParams);
259269
job.setScriptePath(apiServiceVo.getScriptPath());

0 commit comments

Comments
 (0)