| @@ -86,25 +86,30 @@ class DatasetService: | |||
| else: | |||
| return [], 0 | |||
| else: | |||
| # show all datasets that the user has permission to access | |||
| if permitted_dataset_ids: | |||
| query = query.filter( | |||
| db.or_( | |||
| Dataset.permission == DatasetPermissionEnum.ALL_TEAM, | |||
| db.and_(Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id), | |||
| db.and_( | |||
| Dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM, | |||
| Dataset.id.in_(permitted_dataset_ids), | |||
| ), | |||
| if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): | |||
| # show all datasets that the user has permission to access | |||
| if permitted_dataset_ids: | |||
| query = query.filter( | |||
| db.or_( | |||
| Dataset.permission == DatasetPermissionEnum.ALL_TEAM, | |||
| db.and_( | |||
| Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id | |||
| ), | |||
| db.and_( | |||
| Dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM, | |||
| Dataset.id.in_(permitted_dataset_ids), | |||
| ), | |||
| ) | |||
| ) | |||
| ) | |||
| else: | |||
| query = query.filter( | |||
| db.or_( | |||
| Dataset.permission == DatasetPermissionEnum.ALL_TEAM, | |||
| db.and_(Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id), | |||
| else: | |||
| query = query.filter( | |||
| db.or_( | |||
| Dataset.permission == DatasetPermissionEnum.ALL_TEAM, | |||
| db.and_( | |||
| Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id | |||
| ), | |||
| ) | |||
| ) | |||
| ) | |||
| else: | |||
| # if no user, only show datasets that are shared with all team members | |||
| query = query.filter(Dataset.permission == DatasetPermissionEnum.ALL_TEAM) | |||
| @@ -377,14 +382,19 @@ class DatasetService: | |||
| if dataset.tenant_id != user.current_tenant_id: | |||
| logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| if dataset.permission == DatasetPermissionEnum.ONLY_ME and dataset.created_by != user.id: | |||
| logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| if dataset.permission == "partial_members": | |||
| user_permission = DatasetPermission.query.filter_by(dataset_id=dataset.id, account_id=user.id).first() | |||
| if not user_permission and dataset.tenant_id != user.current_tenant_id and dataset.created_by != user.id: | |||
| if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): | |||
| if dataset.permission == DatasetPermissionEnum.ONLY_ME and dataset.created_by != user.id: | |||
| logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| if dataset.permission == "partial_members": | |||
| user_permission = DatasetPermission.query.filter_by(dataset_id=dataset.id, account_id=user.id).first() | |||
| if ( | |||
| not user_permission | |||
| and dataset.tenant_id != user.current_tenant_id | |||
| and dataset.created_by != user.id | |||
| ): | |||
| logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| @staticmethod | |||
| def check_dataset_operator_permission(user: Optional[Account] = None, dataset: Optional[Dataset] = None): | |||
| @@ -394,15 +404,16 @@ class DatasetService: | |||
| if not user: | |||
| raise ValueError("User not found") | |||
| if dataset.permission == DatasetPermissionEnum.ONLY_ME: | |||
| if dataset.created_by != user.id: | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): | |||
| if dataset.permission == DatasetPermissionEnum.ONLY_ME: | |||
| if dataset.created_by != user.id: | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| elif dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM: | |||
| if not any( | |||
| dp.dataset_id == dataset.id for dp in DatasetPermission.query.filter_by(account_id=user.id).all() | |||
| ): | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| elif dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM: | |||
| if not any( | |||
| dp.dataset_id == dataset.id for dp in DatasetPermission.query.filter_by(account_id=user.id).all() | |||
| ): | |||
| raise NoPermissionError("You do not have permission to access this dataset.") | |||
| @staticmethod | |||
| def get_dataset_queries(dataset_id: str, page: int, per_page: int): | |||