Skip to content

Commit 78b7fbd

Browse files
committed
feat: ds table preview column permission
1 parent 2dbc9b4 commit 78b7fbd

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ async def edit_field(session: SessionDep, field: CoreField):
9999

100100

101101
@router.post("/previewData/{id}")
102-
async def edit_local(session: SessionDep, id: int, data: TableObj):
103-
return preview(session, id, data)
102+
async def edit_local(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
103+
return preview(session, current_user, id, data)
104104

105105

106106
@router.post("/fieldEnum/{id}")

backend/apps/datasource/crud/datasource.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,27 @@ def updateField(session: SessionDep, field: CoreField):
237237
update_field(session, field)
238238

239239

240-
def preview(session: SessionDep, id: int, data: TableObj):
240+
def preview(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
241241
if data.fields is None or len(data.fields) == 0:
242242
return {"fields": [], "data": [], "sql": ''}
243243

244-
fields = [f.field_name for f in data.fields if f.checked]
244+
# column is checked, and, column permission for data.fields
245+
f_list = [f for f in data.fields if f.checked]
246+
column_permissions = session.query(DsPermission).filter(
247+
and_(DsPermission.table_id == data.table.id, DsPermission.type == 'column')).all()
248+
if column_permissions is not None:
249+
for permission in column_permissions:
250+
# check permission and user in same rules
251+
obj = session.query(DsRules).filter(
252+
and_(DsRules.permission_list.op('@>')(cast([permission.id], JSONB)),
253+
or_(DsRules.user_list.op('@>')(cast([f'{current_user.id}'], JSONB)),
254+
DsRules.user_list.op('@>')(cast([current_user.id], JSONB))))
255+
).first()
256+
if obj is not None:
257+
permission_list = json.loads(permission.permissions)
258+
f_list = filter_list(f_list, permission_list)
259+
260+
fields = [f.field_name for f in f_list]
245261
if fields is None or len(fields) == 0:
246262
return {"fields": [], "data": [], "sql": ''}
247263

0 commit comments

Comments
 (0)