Skip to content

Commit c1d333e

Browse files
committed
fix: Cross-Workspace Data-Source Schema Disclosure and Modification (Incomplete IDOR Remediation)
1 parent bbfc4cc commit c1d333e

6 files changed

Lines changed: 23 additions & 24 deletions

File tree

backend/apps/datasource/api/datasource.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ async def get_fields(session: SessionDep,
163163
return getFields(session, id, table_name)
164164

165165

166-
@router.post("/syncFields/{id}", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_sync_fields")
167-
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
166+
@router.post("/syncFields/{ds_id}/{id}", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_sync_fields")
167+
@require_permissions(permission=SqlbotPermission(role=['ws_admin'], type='ds', keyExpression="ds_id"))
168168
async def sync_fields(session: SessionDep, trans: Trans,
169169
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_id")):
170170
return sync_single_fields(session, trans, id)
@@ -200,27 +200,27 @@ async def table_list(session: SessionDep, id: int = Path(..., description=f"{PLA
200200
return get_tables_by_ds_id(session, id)
201201

202202

203-
@router.post("/fieldList/{id}", response_model=List[CoreField], summary=f"{PLACEHOLDER_PREFIX}ds_field_list")
204-
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
203+
@router.post("/fieldList/{ds_id}/{id}", response_model=List[CoreField], summary=f"{PLACEHOLDER_PREFIX}ds_field_list")
204+
@require_permissions(permission=SqlbotPermission(role=['ws_admin'], type='ds', keyExpression="ds_id"))
205205
async def field_list(session: SessionDep, field: FieldObj,
206206
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_id")):
207207
return get_fields_by_table_id(session, id, field)
208208

209209

210-
@router.post("/editLocalComment", include_in_schema=False)
211-
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
212-
async def edit_local(session: SessionDep, data: TableObj):
213-
update_table_and_fields(session, data)
210+
# @router.post("/editLocalComment", include_in_schema=False)
211+
# @require_permissions(permission=SqlbotPermission(role=['ws_admin']))
212+
# async def edit_local(session: SessionDep, data: TableObj):
213+
# update_table_and_fields(session, data)
214214

215215

216216
@router.post("/editTable", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_edit_table")
217-
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
217+
@require_permissions(permission=SqlbotPermission(role=['ws_admin'], type='ds', keyExpression="ds_id"))
218218
async def edit_table(session: SessionDep, table: CoreTable):
219219
updateTable(session, table)
220220

221221

222222
@router.post("/editField", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_edit_field")
223-
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
223+
@require_permissions(permission=SqlbotPermission(role=['ws_admin'], type='ds', keyExpression="ds_id"))
224224
async def edit_field(session: SessionDep, field: CoreField):
225225
updateField(session, field)
226226

frontend/src/api/datasource.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ export const datasourceApi = {
1818
request.post(`/datasource/execSql/${id}`, { sql: sql }),
1919
chooseTables: (id: number, data: any) => request.post(`/datasource/chooseTables/${id}`, data),
2020
tableList: (id: number) => request.post(`/datasource/tableList/${id}`),
21-
fieldList: (id: number, data = { fieldName: '' }) =>
22-
request.post(`/datasource/fieldList/${id}`, data),
23-
edit: (data: any) => request.post('/datasource/editLocalComment', data),
21+
fieldList: (ds_id: number, id: number, data = { fieldName: '' }) =>
22+
request.post(`/datasource/fieldList/${ds_id}/${id}`, data),
2423
previewData: (id: number, data: any) => request.post(`/datasource/previewData/${id}`, data),
2524
saveTable: (data: any) => request.post('/datasource/editTable', data),
2625
saveField: (data: any) => request.post('/datasource/editField', data),
2726
getDs: (id: number) => request.post(`/datasource/get/${id}`),
2827
cancelRequests: () => request.cancelRequests(),
2928
getSchema: (data: any) => request.post('/datasource/getSchemaByConf', data),
30-
syncFields: (id: number) => request.post(`/datasource/syncFields/${id}`),
29+
syncFields: (ds_id: number, id: number) => request.post(`/datasource/syncFields/${ds_id}/${id}`),
3130
exportDsSchema: (id: any) =>
3231
request.get(`/datasource/exportDsSchema/${id}`, {
3332
responseType: 'blob',

frontend/src/views/ds/DataTable.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ const clickTable = (table: any) => {
168168
pageInfo.total = 0
169169
previewData.value = []
170170
datasourceApi
171-
.fieldList(table.id)
171+
.fieldList(table.ds_id, table.id)
172172
.then((res) => {
173173
fieldList.value = res
174174
pageInfo.total = res.length
@@ -259,7 +259,7 @@ const changeStatus = (row: any) => {
259259
const syncFields = () => {
260260
loading.value = true
261261
datasourceApi
262-
.syncFields(currentTable.value.id)
262+
.syncFields(currentTable.value.ds_id, currentTable.value.id)
263263
.then(() => {
264264
btnSelectClick('d')
265265
ElMessage.success(t('ds.sync_fields_success'))
@@ -343,7 +343,7 @@ const btnSelectClick = (val: any) => {
343343
344344
if (val === 'd') {
345345
datasourceApi
346-
.fieldList(currentTable.value.id, { fieldName: '' })
346+
.fieldList(currentTable.value.ds_id, currentTable.value.id, { fieldName: '' })
347347
.then((res) => {
348348
fieldList.value = res
349349
pageInfo.total = res.length
@@ -497,9 +497,9 @@ const btnSelectClick = (val: any) => {
497497
>
498498
<el-switch
499499
v-model="currentTable.checked"
500-
@change="changeChecked"
501500
size="small"
502501
style="margin-right: 8px"
502+
@change="changeChecked"
503503
/>
504504

505505
{{ currentTable.checked ? t('user.disable') : t('user.enable') }}

frontend/src/views/ds/TableList.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ const saveField = () => {
242242
243243
const clickTable = (table: any) => {
244244
currentTable.value = table
245-
datasourceApi.fieldList(table.id).then((res) => {
245+
datasourceApi.fieldList(table.ds_id, table.id).then((res) => {
246246
fieldList.value = res
247247
datasourceApi.previewData(dsId.value, buildData()).then((res) => {
248248
previewData.value = res

frontend/src/views/ds/TableRelationship.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ const addNode = (node: any, tableX: any, tableY: any) => {
366366
const clickTable = (table: any) => {
367367
loading.value = true
368368
datasourceApi
369-
.fieldList(table.id)
369+
.fieldList(table.ds_id, table.id)
370370
.then((res: AnyColumn) => {
371371
const node = {
372372
id: table.id,

frontend/src/views/system/permission/index.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ const getDsList = (row: any) => {
169169
170170
if (row) {
171171
handleDsIdChange({ id: row.ds_id, name: row.ds_name })
172-
handleEditeTable(row.table_id)
172+
handleEditeTable(row.ds_id, row.table_id)
173173
}
174174
}
175175
const handleRowPermission = (row: any) => {
@@ -252,7 +252,7 @@ const handleDsIdChange = (val: any) => {
252252
const handleTableIdChange = (val: any) => {
253253
columnForm.table_id = val.id
254254
columnForm.table_name = val.table_name
255-
datasourceApi.fieldList(val.id).then((res: any) => {
255+
datasourceApi.fieldList(val.ds_id, val.id).then((res: any) => {
256256
fieldListOptions.value = res || []
257257
if (columnForm.type === 'row') return
258258
columnForm.permissions = fieldListOptions.value.map((ele) => {
@@ -262,9 +262,9 @@ const handleTableIdChange = (val: any) => {
262262
})
263263
}
264264
265-
const handleEditeTable = (val: any) => {
265+
const handleEditeTable = (ds_id: any, val: any) => {
266266
datasourceApi
267-
.fieldList(val)
267+
.fieldList(ds_id, val)
268268
.then((res: any) => {
269269
fieldListOptions.value = res || []
270270
if (columnForm.type === 'row') return

0 commit comments

Comments
 (0)