|
4 | 4 |
|
5 | 5 | from fastapi import HTTPException |
6 | 6 | from sqlalchemy import and_, text |
| 7 | +from sqlbot_xpack.permissions.models.ds_rules import DsRules |
7 | 8 | from sqlmodel import select |
8 | 9 |
|
9 | 10 | from apps.datasource.crud.permission import get_column_permission_fields, get_row_permission_filters, is_normal_user |
@@ -250,8 +251,9 @@ def preview(session: SessionDep, current_user: CurrentUser, id: int, data: Table |
250 | 251 | f_list = [f for f in data.fields if f.checked] |
251 | 252 | if is_normal_user(current_user): |
252 | 253 | # column is checked, and, column permission for data.fields |
| 254 | + contain_rules = session.query(DsRules).all() |
253 | 255 | f_list = get_column_permission_fields(session=session, current_user=current_user, table=data.table, |
254 | | - fields=f_list) |
| 256 | + fields=f_list, contain_rules=contain_rules) |
255 | 257 |
|
256 | 258 | # row permission tree |
257 | 259 | where_str = '' |
@@ -336,11 +338,27 @@ def get_table_obj_by_ds(session: SessionDep, current_user: CurrentUser, ds: Core |
336 | 338 | tables = session.query(CoreTable).filter(CoreTable.ds_id == ds.id).all() |
337 | 339 | conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration))) if ds.type != "excel" else get_engine_config() |
338 | 340 | schema = conf.dbSchema if conf.dbSchema is not None and conf.dbSchema != "" else conf.database |
| 341 | + |
| 342 | + # get all field |
| 343 | + table_ids = [table.id for table in tables] |
| 344 | + all_fields = session.query(CoreField).filter( |
| 345 | + and_(CoreField.table_id.in_(table_ids), CoreField.checked == True)).all() |
| 346 | + # build dict |
| 347 | + fields_dict = {} |
| 348 | + for field in all_fields: |
| 349 | + if fields_dict.get(field.table_id): |
| 350 | + fields_dict.get(field.table_id).append(field) |
| 351 | + else: |
| 352 | + fields_dict[field.table_id] = [field] |
| 353 | + |
| 354 | + contain_rules = session.query(DsRules).all() |
339 | 355 | for table in tables: |
340 | | - fields = session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.checked == True)).all() |
| 356 | + # fields = session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.checked == True)).all() |
| 357 | + fields = fields_dict.get(table.id) |
341 | 358 |
|
342 | 359 | # do column permissions, filter fields |
343 | | - fields = get_column_permission_fields(session=session, current_user=current_user, table=table, fields=fields) |
| 360 | + fields = get_column_permission_fields(session=session, current_user=current_user, table=table, fields=fields, |
| 361 | + contain_rules=contain_rules) |
344 | 362 | _list.append(TableAndFields(schema=schema, table=table, fields=fields)) |
345 | 363 | return _list |
346 | 364 |
|
|
0 commit comments