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:
@@ -269,7 +269,7 @@ class ResearcherAgent:
|
||||
logger.warning(f"Keyword-Extraktion fehlgeschlagen: {e}")
|
||||
return None, None
|
||||
|
||||
async def search(self, title: str, description: str = "", incident_type: str = "adhoc", international: bool = True) -> tuple[list[dict], ClaudeUsage | None]:
|
||||
async def search(self, title: str, description: str = "", incident_type: str = "adhoc", international: bool = True, user_id: int = None) -> tuple[list[dict], ClaudeUsage | None]:
|
||||
"""Sucht nach Informationen zu einem Vorfall."""
|
||||
from config import OUTPUT_LANGUAGE
|
||||
if incident_type == "research":
|
||||
@@ -290,7 +290,7 @@ class ResearcherAgent:
|
||||
articles = self._parse_response(result)
|
||||
|
||||
# Ausgeschlossene Quellen dynamisch aus DB laden
|
||||
excluded_sources = await self._get_excluded_sources()
|
||||
excluded_sources = await self._get_excluded_sources(user_id=user_id)
|
||||
|
||||
# Ausgeschlossene Quellen filtern
|
||||
filtered = []
|
||||
@@ -317,14 +317,23 @@ class ResearcherAgent:
|
||||
logger.error(f"Recherche-Fehler: {e}")
|
||||
return [], None
|
||||
|
||||
async def _get_excluded_sources(self) -> list[str]:
|
||||
"""Lädt ausgeschlossene Quellen aus der Datenbank."""
|
||||
async def _get_excluded_sources(self, user_id: int = None) -> list[str]:
|
||||
"""Laedt ausgeschlossene Quellen (global + per-User)."""
|
||||
try:
|
||||
from source_rules import get_source_rules
|
||||
from source_rules import get_source_rules, get_user_excluded_domains
|
||||
rules = await get_source_rules()
|
||||
return rules.get("excluded_domains", [])
|
||||
excluded = list(rules.get("excluded_domains", []))
|
||||
|
||||
# User-spezifische Ausschluesse hinzufuegen
|
||||
if user_id:
|
||||
user_excluded = await get_user_excluded_domains(user_id)
|
||||
for domain in user_excluded:
|
||||
if domain not in excluded:
|
||||
excluded.append(domain)
|
||||
|
||||
return excluded
|
||||
except Exception as e:
|
||||
logger.warning(f"Fallback auf config.py für Excluded Sources: {e}")
|
||||
logger.warning(f"Fallback auf config.py fuer Excluded Sources: {e}")
|
||||
from config import EXCLUDED_SOURCES
|
||||
return list(EXCLUDED_SOURCES)
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren