@@ -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