mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
feat: ds table preview column permission
This commit is contained in:
@@ -99,8 +99,8 @@ async def edit_field(session: SessionDep, field: CoreField):
|
||||
|
||||
|
||||
@router.post("/previewData/{id}")
|
||||
async def edit_local(session: SessionDep, id: int, data: TableObj):
|
||||
return preview(session, id, data)
|
||||
async def edit_local(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
|
||||
return preview(session, current_user, id, data)
|
||||
|
||||
|
||||
@router.post("/fieldEnum/{id}")
|
||||
|
||||
@@ -237,11 +237,27 @@ def updateField(session: SessionDep, field: CoreField):
|
||||
update_field(session, field)
|
||||
|
||||
|
||||
def preview(session: SessionDep, id: int, data: TableObj):
|
||||
def preview(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
|
||||
if data.fields is None or len(data.fields) == 0:
|
||||
return {"fields": [], "data": [], "sql": ''}
|
||||
|
||||
fields = [f.field_name for f in data.fields if f.checked]
|
||||
# column is checked, and, column permission for data.fields
|
||||
f_list = [f for f in data.fields if f.checked]
|
||||
column_permissions = session.query(DsPermission).filter(
|
||||
and_(DsPermission.table_id == data.table.id, DsPermission.type == 'column')).all()
|
||||
if column_permissions is not None:
|
||||
for permission in column_permissions:
|
||||
# check permission and user in same rules
|
||||
obj = session.query(DsRules).filter(
|
||||
and_(DsRules.permission_list.op('@>')(cast([permission.id], JSONB)),
|
||||
or_(DsRules.user_list.op('@>')(cast([f'{current_user.id}'], JSONB)),
|
||||
DsRules.user_list.op('@>')(cast([current_user.id], JSONB))))
|
||||
).first()
|
||||
if obj is not None:
|
||||
permission_list = json.loads(permission.permissions)
|
||||
f_list = filter_list(f_list, permission_list)
|
||||
|
||||
fields = [f.field_name for f in f_list]
|
||||
if fields is None or len(fields) == 0:
|
||||
return {"fields": [], "data": [], "sql": ''}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user