This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch dev-2.1.4
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev-2.1.4 by this push:
     new 4b60486e7 [Improve] api access permission improvement
4b60486e7 is described below

commit 4b60486e7e70e91f971c3c558bbac756b908cad7
Author: benjobs <[email protected]>
AuthorDate: Tue Apr 16 00:37:26 2024 +0800

    [Improve] api access permission improvement
---
 .../core/controller/FlinkSqlController.java        | 22 ++++++++----
 .../core/controller/SavePointController.java       | 25 ++++++-------
 .../console/core/controller/SettingController.java |  1 +
 .../streampark/console/core/entity/FlinkSql.java   |  2 ++
 .../streampark/console/core/entity/SavePoint.java  |  2 ++
 .../src/api/flink/app/flinkSql.ts                  |  2 +-
 .../src/api/flink/app/savepoint.ts                 |  5 +--
 .../flink/app/components/AppDetail/DetailTab.vue   |  5 +--
 .../components/AppDetail/FlinkSqlCompareModal.vue  |  6 +++-
 .../src/views/flink/app/components/FlinkSql.vue    | 41 ++++++++++++----------
 .../src/views/flink/app/hooks/useDetail.ts         |  2 +-
 .../src/views/flink/app/hooks/useEditStreamPark.ts |  7 ++--
 12 files changed, 68 insertions(+), 52 deletions(-)

diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
index 2fad82e5b..3abef9bcf 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
@@ -19,7 +19,9 @@ package org.apache.streampark.console.core.controller;
 
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
+import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.exception.InternalException;
+import org.apache.streampark.console.core.annotation.PermissionScope;
 import org.apache.streampark.console.core.entity.Application;
 import org.apache.streampark.console.core.entity.FlinkSql;
 import org.apache.streampark.console.core.service.FlinkSqlService;
@@ -85,22 +87,27 @@ public class FlinkSqlController {
 
   @Operation(summary = "List the application sql")
   @PostMapping("list")
-  public RestResponse list(Long appId, RestRequest request) {
-    IPage<FlinkSql> page = flinkSqlService.page(appId, request);
+  @PermissionScope(app = "#flinkSql.appId", team = "#flinkSql.teamId")
+  public RestResponse list(FlinkSql flinkSql, RestRequest request) {
+    IPage<FlinkSql> page = flinkSqlService.page(flinkSql.getAppId(), request);
     return RestResponse.success(page);
   }
 
   @Operation(summary = "Delete sql")
   @PostMapping("delete")
   @RequiresPermissions("sql:delete")
-  public RestResponse delete(Long id) {
-    Boolean deleted = flinkSqlService.removeById(id);
+  @PermissionScope(app = "#flinkSql.appId", team = "#teamId")
+  public RestResponse delete(FlinkSql flinkSql) {
+    Boolean deleted = flinkSqlService.removeById(flinkSql.getId());
     return RestResponse.success(deleted);
   }
 
   @Operation(summary = "List sql by ids")
   @PostMapping("get")
-  public RestResponse get(String id) throws InternalException {
+  @PermissionScope(app = "#appId", team = "#teamId")
+  public RestResponse get(Long appId, Long teamId, String id) throws 
InternalException {
+    ApiAlertException.throwIfTrue(
+        appId == null || teamId == null, "Permission denied, appId and teamId 
cannot be null");
     String[] array = id.split(",");
     FlinkSql flinkSql1 = flinkSqlService.getById(array[0]);
     flinkSql1.base64Encode();
@@ -114,8 +121,9 @@ public class FlinkSqlController {
 
   @Operation(summary = "List the applications sql histories")
   @PostMapping("history")
-  public RestResponse sqlhistory(Application application) {
-    List<FlinkSql> sqlList = flinkSqlService.history(application);
+  @PermissionScope(app = "#app.id", team = "app.teamId")
+  public RestResponse sqlhistory(Application app) {
+    List<FlinkSql> sqlList = flinkSqlService.history(app);
     return RestResponse.success(sqlList);
   }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
index b5d69dde1..1e69f5e95 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
@@ -21,6 +21,7 @@ import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.exception.InternalException;
 import org.apache.streampark.console.core.annotation.ApiAccess;
+import org.apache.streampark.console.core.annotation.PermissionScope;
 import org.apache.streampark.console.core.entity.Application;
 import org.apache.streampark.console.core.entity.SavePoint;
 import org.apache.streampark.console.core.service.ApplicationService;
@@ -54,27 +55,22 @@ public class SavePointController {
 
   @Autowired private SavePointService savePointService;
 
-  @Operation(summary = "Get application savepoint latest")
-  @PostMapping("latest")
-  public RestResponse latest(Long appId) {
-    SavePoint savePoint = savePointService.getLatest(appId);
-    return RestResponse.success(savePoint);
-  }
-
   @Operation(summary = "List application savepoint histories")
   @PostMapping("history")
-  public RestResponse history(SavePoint savePoint, RestRequest request) {
-    IPage<SavePoint> page = savePointService.page(savePoint, request);
+  @PermissionScope(app = "#sp.appId", team = "#sp.teamId")
+  public RestResponse history(SavePoint sp, RestRequest request) {
+    IPage<SavePoint> page = savePointService.page(sp, request);
     return RestResponse.success(page);
   }
 
   @Operation(summary = "Delete savepoint")
   @PostMapping("delete")
   @RequiresPermissions("savepoint:delete")
-  public RestResponse delete(Long id) throws InternalException {
-    SavePoint savePoint = savePointService.getById(id);
+  @PermissionScope(app = "#sp.appId", team = "#sp.teamId")
+  public RestResponse delete(SavePoint sp) throws InternalException {
+    SavePoint savePoint = savePointService.getById(sp.getId());
     Application application = applicationService.getById(savePoint.getAppId());
-    Boolean deleted = savePointService.delete(id, application);
+    Boolean deleted = savePointService.delete(sp.getId(), application);
     return RestResponse.success(deleted);
   }
 
@@ -96,8 +92,9 @@ public class SavePointController {
   @ApiAccess
   @PostMapping("trigger")
   @RequiresPermissions("savepoint:trigger")
-  public RestResponse trigger(Long appId, @Nullable String savepointPath) {
-    savePointService.trigger(appId, savepointPath);
+  @PermissionScope(app = "#savePoint.appId", team = "#savePoint.teamId")
+  public RestResponse trigger(SavePoint savePoint, @Nullable String 
savepointPath) {
+    savePointService.trigger(savePoint.getAppId(), savepointPath);
     return RestResponse.success(true);
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
index 12555964d..f3926ea57 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
@@ -60,6 +60,7 @@ public class SettingController {
 
   @Operation(summary = "Get setting")
   @PostMapping("get")
+  @RequiresPermissions("setting:view")
   public RestResponse get(String key) {
     Setting setting = settingService.get(key);
     return RestResponse.success(setting);
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkSql.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkSql.java
index 5b732d77d..474ebc5fb 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkSql.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkSql.java
@@ -62,6 +62,8 @@ public class FlinkSql {
   /** dependency diff */
   private transient boolean dependencyDifference = false;
 
+  private transient Long teamId;
+
   public FlinkSql() {}
 
   public FlinkSql(Application application) {
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/SavePoint.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/SavePoint.java
index 79a4e3871..dab85f43d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/SavePoint.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/SavePoint.java
@@ -52,4 +52,6 @@ public class SavePoint {
   private Date triggerTime;
 
   private Date createTime;
+
+  private transient Long teamId;
 }
diff --git 
a/streampark-console/streampark-console-webapp/src/api/flink/app/flinkSql.ts 
b/streampark-console/streampark-console-webapp/src/api/flink/app/flinkSql.ts
index 1ec71f79e..e4af1df51 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/app/flinkSql.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/app/flinkSql.ts
@@ -43,7 +43,7 @@ export function fetchFlinkSqlList(data) {
   });
 }
 
-export function fetchRemoveFlinkSql(data: { id: string }): Promise<boolean> {
+export function fetchRemoveFlinkSql(data: { appId: any; id: any }): 
Promise<boolean> {
   return defHttp.post({
     url: FLINK_SQL_API.DELETE,
     data,
diff --git 
a/streampark-console/streampark-console-webapp/src/api/flink/app/savepoint.ts 
b/streampark-console/streampark-console-webapp/src/api/flink/app/savepoint.ts
index 359b53136..0f030e0c8 100644
--- 
a/streampark-console/streampark-console-webapp/src/api/flink/app/savepoint.ts
+++ 
b/streampark-console/streampark-console-webapp/src/api/flink/app/savepoint.ts
@@ -23,9 +23,6 @@ enum SAVE_POINT_API {
   TRIGGER = '/flink/savepoint/trigger',
 }
 
-export function fetchLatest(data: Recordable) {
-  return defHttp.post({ url: SAVE_POINT_API.LATEST, data });
-}
 export function fetchSavePonitHistory(data: Recordable) {
   return defHttp.post({ url: SAVE_POINT_API.HISTORY, data });
 }
@@ -34,7 +31,7 @@ export function fetchSavePonitHistory(data: Recordable) {
  * @param data id
  * @returns {Promise<boolean>}
  */
-export function fetchRemoveSavePoint(data: { id: string }): Promise<boolean> {
+export function fetchRemoveSavePoint(data: { appId: any; id: any }): 
Promise<boolean> {
   return defHttp.post({
     url: SAVE_POINT_API.DELETE,
     data,
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/DetailTab.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/DetailTab.vue
index dc8853e5c..d1298d330 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/DetailTab.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/DetailTab.vue
@@ -232,6 +232,7 @@
     try {
       const res = await fetchFlinkSql({
         id: record.id,
+        appId: record.appId,
       });
       openFlinkDrawer(true, {
         sql: decodeByBase64(res.sql),
@@ -251,7 +252,7 @@
 
   /* delete flink sql */
   async function handleDeleteFlinkSql(record: Recordable) {
-    await fetchRemoveFlinkSql({ id: record.id });
+    await fetchRemoveFlinkSql({ id: record.id, appId: record.appId });
     await reloadFlinkSql();
   }
 
@@ -344,7 +345,7 @@
 
   /* delete savePoint */
   async function handleDeleteSavePoint(record: Recordable) {
-    await fetchRemoveSavePoint({ id: record.id });
+    await fetchRemoveSavePoint({ id: record.id, appId: record.appId });
     await reloadSavePoint();
   }
 
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/FlinkSqlCompareModal.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/FlinkSqlCompareModal.vue
index 04f185e6e..eb00bbc71 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/FlinkSqlCompareModal.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppDetail/FlinkSqlCompareModal.vue
@@ -40,6 +40,7 @@
   const submitLoading = ref<boolean>(false);
   const compareRecord = reactive<Recordable>({});
   const values = useDetailProviderContext();
+  const appId = ref<any>();
 
   const [registerFlinkSqlDifferentDrawer, { openDrawer: openFlinkSqlDiffDrawer 
}] = useDrawer();
   const [registerModal, { closeModal }] = useModalInner((data) => {
@@ -47,8 +48,9 @@
   });
 
   async function onReceiveModalData(data) {
+    appId.value = toRaw(values).app.id;
     const res = await fetchFlinkSqlList({
-      appId: toRaw(values).app.id,
+      appId: appId.value,
       pageNo: 1,
       pageSize: 999999,
     });
@@ -83,11 +85,13 @@
     try {
       const source = await fetchFlinkSql({
         id: compareRecord.id,
+        appId: appId.value,
       });
       const sourceSql = decodeByBase64(source.sql);
       const sourceVersion = source.version;
       const target = await fetchFlinkSql({
         id: values.target,
+        appId: appId.value,
       });
       const targetSql = decodeByBase64(target.sql);
       const targetVersion = target.version;
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/FlinkSql.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/FlinkSql.vue
index 247b0d84c..2dd8864b0 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/FlinkSql.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/FlinkSql.vue
@@ -39,7 +39,7 @@
   const { t } = useI18n();
 
   const flinkSql = ref();
-  const vertifyRes = reactive({
+  const verifyRes = reactive({
     errorMsg: '',
     verified: false,
     errorStart: 0,
@@ -55,6 +55,9 @@
       type: String,
       default: '',
     },
+    appId: {
+      type: String as PropType<Nullable<string>>,
+    },
     versionId: {
       type: String as PropType<Nullable<string>>,
     },
@@ -68,7 +71,7 @@
   /* verify */
   async function handleVerifySql() {
     if (isEmpty(props.value)) {
-      vertifyRes.errorMsg = 'empty sql';
+      verifyRes.errorMsg = 'empty sql';
       return false;
     }
 
@@ -83,22 +86,22 @@
         });
         const success = data.data === true || data.data === 'true';
         if (success) {
-          vertifyRes.verified = true;
-          vertifyRes.errorMsg = '';
+          verifyRes.verified = true;
+          verifyRes.errorMsg = '';
           syntaxError();
           return true;
         } else {
-          vertifyRes.errorStart = parseInt(data.start);
-          vertifyRes.errorEnd = parseInt(data.end);
+          verifyRes.errorStart = parseInt(data.start);
+          verifyRes.errorEnd = parseInt(data.end);
           switch (data.type) {
             case 4:
-              vertifyRes.errorMsg = 'Unsupported sql';
+              verifyRes.errorMsg = 'Unsupported sql';
               break;
             case 5:
-              vertifyRes.errorMsg = "SQL is not endWith ';'";
+              verifyRes.errorMsg = "SQL is not endWith ';'";
               break;
             default:
-              vertifyRes.errorMsg = data.message;
+              verifyRes.errorMsg = data.message;
               break;
           }
           syntaxError();
@@ -116,14 +119,14 @@
     if (editor) {
       const model = editor.getModel();
       const monaco = await getMonacoInstance();
-      if (vertifyRes.errorMsg) {
+      if (verifyRes.errorMsg) {
         try {
           monaco.editor.setModelMarkers(model, 'sql', [
             {
-              startLineNumber: vertifyRes.errorStart,
-              endLineNumber: vertifyRes.errorEnd,
+              startLineNumber: verifyRes.errorStart,
+              endLineNumber: verifyRes.errorEnd,
               severity: monaco.MarkerSeverity.Error,
-              message: vertifyRes.errorMsg,
+              message: verifyRes.errorMsg,
             },
           ]);
         } catch (e) {
@@ -173,7 +176,7 @@
   const flinkEditorClass = computed(() => {
     return {
       ...fullEditorClass.value,
-      ['syntax-' + (vertifyRes.errorMsg ? 'false' : 'true')]: true,
+      ['syntax-' + (verifyRes.errorMsg ? 'false' : 'true')]: true,
     };
   });
 
@@ -226,11 +229,11 @@
     </ButtonGroup>
     <div class="flex items-center justify-between" v-else>
       <div class="mt-10px flex-1 mr-10px overflow-hidden whitespace-nowrap">
-        <div class="text-red-600 overflow-ellipsis overflow-hidden" 
v-if="vertifyRes.errorMsg">
-          {{ vertifyRes.errorMsg }}
+        <div class="text-red-600 overflow-ellipsis overflow-hidden" 
v-if="verifyRes.errorMsg">
+          {{ verifyRes.errorMsg }}
         </div>
         <div v-else class="text-green-700">
-          <span v-if="vertifyRes.verified"> {{ 
t('flink.app.flinkSql.successful') }} </span>
+          <span v-if="verifyRes.verified"> {{ 
t('flink.app.flinkSql.successful') }} </span>
         </div>
       </div>
       <div class="flinksql-tool">
@@ -262,9 +265,9 @@
     </div>
   </div>
   <p class="conf-desc mt-10px" v-if="!fullScreenStatus">
-    <span class="text-red-600" v-if="vertifyRes.errorMsg"> {{ 
vertifyRes.errorMsg }} </span>
+    <span class="text-red-600" v-if="verifyRes.errorMsg"> {{ 
verifyRes.errorMsg }} </span>
     <span v-else class="text-green-700">
-      <span v-if="vertifyRes.verified"> {{ t('flink.app.flinkSql.successful') 
}} </span>
+      <span v-if="verifyRes.verified"> {{ t('flink.app.flinkSql.successful') 
}} </span>
     </span>
   </p>
 </template>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useDetail.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useDetail.ts
index 9e6959d5c..c210de303 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useDetail.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useDetail.ts
@@ -108,7 +108,7 @@ export const userDetail = (
   }
   /* delete savePoint */
   async function handleDeleteSavePoint(record: Recordable) {
-    await fetchRemoveSavePoint({ id: record.id });
+    await fetchRemoveSavePoint({ id: record.id, appId: record.appId });
     reloadSavePoint();
   }
 
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
index 3ad8db2cd..3fb2b0c75 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
@@ -37,6 +37,7 @@ export const useEditStreamParkSchema = (
 ) => {
   const flinkSql = ref();
   const route = useRoute();
+  const appId = route.query.appId as string;
   const {
     alerts,
     flinkEnvs,
@@ -48,14 +49,14 @@ export const useEditStreamParkSchema = (
     getExecutionModeSchema,
     suggestions,
   } = useCreateAndEditSchema(dependencyRef, {
-    appId: route.query.appId as string,
+    appId: appId,
     mode: 'streampark',
   });
   const { createMessage } = useMessage();
   const [registerDifferentDrawer, { openDrawer: openDiffDrawer }] = 
useDrawer();
 
   async function handleChangeSQL(v: string) {
-    const res = await fetchFlinkSql({ id: v });
+    const res = await fetchFlinkSql({ id: v, appId: appId });
     flinkSql.value?.setContent(decodeByBase64(res.sql));
     console.log('res', flinkSql.value);
     unref(dependencyRef)?.setDefaultValue(JSON.parse(res.dependency || '{}'));
@@ -66,7 +67,7 @@ export const useEditStreamParkSchema = (
       createMessage.warning('Two versions must be selected for comparison');
       return Promise.reject('error, compareSQL array length less thatn 2');
     }
-    const res = await fetchFlinkSql({ id: compareSQL.join(',') });
+    const res = await fetchFlinkSql({ appId: appId, id: compareSQL.join(',') 
});
     const obj1 = res[0];
     const obj2 = res[1];
     const sql1 = decodeByBase64(obj1.sql);

Reply via email to