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