Phase 8a+8b: Pre-Commit-Hook fuer shared/-Drift + Audit-UI resource_id-Filter
Phase 8a (Hook): - scripts/git-hooks/pre-commit: prueft bei Commits mit src/shared/-Aenderungen den Drift-Stand via sync_shared.py --check und gibt eine Warnung aus (blockiert NICHT - User entscheidet selbst, ob er zurueck will). - scripts/install-hooks.sh: kopiert Hooks aus scripts/git-hooks/ nach .git/hooks/ (idempotent, ueberspringt user-eigene Hooks). Phase 8b (Audit-UI): - dashboard.html: Resource-ID Eingabefeld neben den anderen Audit-Filtern. - audit.js: Filter-Listen erweitern, params um resource_id ergaenzt (Backend hatte den Filter seit Phase 5 schon). - Damit ist die Audit-Spur einer einzelnen Ressource auch im Audit-Log-Tab filterbar (vorher nur per Direkt-URL bzw. per Quellen-Audit-Modal).
Dieser Commit ist enthalten in:
@@ -393,6 +393,7 @@
|
||||
<select class="filter-select" id="auditFilterResource">
|
||||
<option value="">Alle Ressourcen</option>
|
||||
</select>
|
||||
<input type="number" class="filter-select" id="auditFilterResourceId" placeholder="Ressourcen-ID" min="1" style="width:130px;">
|
||||
<select class="filter-select" id="auditFilterAdmin">
|
||||
<option value="">Alle Admins</option>
|
||||
</select>
|
||||
|
||||
@@ -38,7 +38,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
});
|
||||
|
||||
// Filter-Inputs verdrahten
|
||||
["auditFilterAction", "auditFilterResource", "auditFilterAdmin",
|
||||
["auditFilterAction", "auditFilterResource", "auditFilterResourceId", "auditFilterAdmin",
|
||||
"auditFilterFrom", "auditFilterTo"].forEach((id) => {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.addEventListener("change", () => { auditCache.offset = 0; loadAudit(); });
|
||||
@@ -112,12 +112,14 @@ async function loadAudit() {
|
||||
const params = new URLSearchParams();
|
||||
const action = document.getElementById("auditFilterAction")?.value;
|
||||
const resource = document.getElementById("auditFilterResource")?.value;
|
||||
const resourceId = document.getElementById("auditFilterResourceId")?.value;
|
||||
const adminId = document.getElementById("auditFilterAdmin")?.value;
|
||||
const from = document.getElementById("auditFilterFrom")?.value;
|
||||
const to = document.getElementById("auditFilterTo")?.value;
|
||||
|
||||
if (action) params.append("action", action);
|
||||
if (resource) params.append("resource_type", resource);
|
||||
if (resourceId) params.append("resource_id", resourceId);
|
||||
if (adminId) params.append("admin_id", adminId);
|
||||
if (from) params.append("from_ts", from);
|
||||
if (to) params.append("to_ts", to);
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren