Per-User Domain-Ausschlüsse + Grundquellen-Schutz
- Neue Tabelle user_excluded_domains für benutzerspezifische Ausschlüsse - Domain-Ausschlüsse wirken nur für den jeweiligen User, nicht org-weit - user_id wird durch die gesamte Pipeline geschleust (Orchestrator → Researcher → RSS-Parser) - Grundquellen (is_global) können nicht mehr bearbeitet/gelöscht werden im Frontend - Grundquelle-Badge bei globalen Quellen statt Edit/Delete-Buttons - Filter Von mir ausgeschlossen im Quellen-Modal Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -26,7 +26,7 @@ class RSSParser:
|
||||
cleaned = [w for w in words if not w.isdigit()]
|
||||
return cleaned if cleaned else words
|
||||
|
||||
async def search_feeds(self, search_term: str, international: bool = True, tenant_id: int = None, keywords: list[str] | None = None) -> list[dict]:
|
||||
async def search_feeds(self, search_term: str, international: bool = True, tenant_id: int = None, keywords: list[str] | None = None, user_id: int = None) -> list[dict]:
|
||||
"""Durchsucht RSS-Feeds nach einem Suchbegriff.
|
||||
|
||||
Args:
|
||||
@@ -50,6 +50,19 @@ class RSSParser:
|
||||
|
||||
rss_feeds = await self._get_rss_feeds(tenant_id=tenant_id)
|
||||
|
||||
# User-spezifische Ausschluesse anwenden
|
||||
if user_id:
|
||||
try:
|
||||
from source_rules import get_user_excluded_domains
|
||||
user_excluded = await get_user_excluded_domains(user_id)
|
||||
if user_excluded:
|
||||
for cat in rss_feeds:
|
||||
rss_feeds[cat] = [f for f in rss_feeds[cat]
|
||||
if not any(excl in (f.get("url", "") + f.get("name", "")).lower()
|
||||
for excl in user_excluded)]
|
||||
except Exception as e:
|
||||
logger.warning(f"User-Ausschluesse konnten nicht geladen werden: {e}")
|
||||
|
||||
# Feed-Kategorien filtern
|
||||
if international:
|
||||
categories = rss_feeds.keys()
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren