Zarządzanie plikami baz: trzy poziomy dostępu (DAN-27) #69
Reference in New Issue
Block a user
Delete Branch "feat/zarzadzanie-plikami"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ekran „Pliki", wpięty w kontrolę dostępu z PRE-27.
filesfiles_inputStan jest teraz trwały
DAN-15 trzymał go w zmiennej
DISABLED_BASES, bo warstwa danych nie miała gdzie zapisywać — udział był montowany read-only. Skoro stan ma być klikany, musi przetrwać restart: udział jest zapisywalny, a stan leży w pliku obok baz (zapis atomowy — plik opisuje cały zbiór, więc obcięcie w połowie skasowałoby wiedzę o wszystkich naraz).DISABLED_BASESzostaje jako awaryjne wyłączenie z konfiguracji i odsiewa dodatkowo — nie odwrotnie, bo inaczej ktoś z dostępem do ekranu włączyłby bazę wyłączoną świadomie na poziomie wdrożenia.Archiwizacja nie kasuje
Plik zostaje na dysku, zamrożony, ze znacznikiem czasu; znika wyłącznie z użytku. To najdalej idąca operacja osoby wgrywającej dane. Test sprawdza wprost, że plik po archiwizacji nadal istnieje — bo to jest cała istota tej operacji.
Walidacja jest bramką do użytku, nie filtrem na wejściu
Plik wgrany zostaje niezależnie od wyniku — nie tracimy niczego, co ktoś wgrał. Zmienia się tylko to, czy da się go włączyć. Sprawdzenie biegnie też w chwili włączania, nie tylko przy wgrywaniu: reguły mogą się zmienić po fakcie.
Reguły ustawiane z ekranu: dozwolone rozszerzenia, maksymalny rozmiar, minimalna liczba wierszy, wymagane kolumny (sprawdzane w środku arkusza), odrzucanie duplikatów po
sha256.O walidacji wie tylko administrator
for_admin=False, nie ukrywane w szablonie — gdyby dochodziły do przeglądarki, wystarczyłby podgląd źródła, żeby poznać regułyTest parametryzowany po obu niższych poziomach szuka w odpowiedzi śladów mechanizmu (
walidacj,reguł, nazwy wymaganych kolumn, komunikaty odrzucenia) i wymaga, żeby żadnego nie było.Groundwork pod krok drugi
Każdy plik ma policzony
sha256— tożsamość niezależna od nazwy. Wykorzystuje ją już odrzucanie duplikatów, a w kroku drugim posłuży do pilnowania zgodności lustra w SQL.Przy okazji
Naprawiony błąd, który dopiero co bym wprowadził:
Path("")toPath("."), czyli wartość prawdziwa, więcPath(os.getenv(...)) or domyślnazawsze wybierało pustą zmienną i zapisywało stan do katalogu bieżącego.⚠️ Wymaga zapisywalnego udziału — osobny PR w repo
deploy(gałąźfeat/pliki-zapis). Opisany tam świadomy koszt: znika jedna warstwa obrony w głąb.Weryfikacja
15 testów rdzenia w warstwie danych + 12 testów trzech poziomów w prezentacji. Suity: dane 28, prezentacja 299, logika 342, render 41.
🤖 Generated with Claude Code
Ekran „Pliki" z trzema poziomami, wpiętymi w kontrolę dostępu z PRE-27: „files" widzi listę i KLIKANIEM decyduje, z których baz program korzysta, „files_input" dokłada wgrywanie i ARCHIWIZACJĘ, administrator kasowanie, przywracanie z archiwum i REGUŁY WALIDACJI. STAN JEST TERAZ TRWAŁY. DAN-15 trzymał go w zmiennej DISABLED_BASES, bo warstwa danych nie miała gdzie zapisywać — udział był montowany read-only. Skoro stan ma być klikany, musi przetrwać restart, więc udział jest zapisywalny, a stan leży w pliku obok baz (zapis atomowy: plik opisuje CAŁY zbiór, więc obcięcie w połowie skasowałoby wiedzę o wszystkich naraz). DISABLED_BASES zostaje jako awaryjne wyłączenie z konfiguracji i odsiewa DODATKOWO — nie odwrotnie, bo inaczej ktoś z dostępem do ekranu włączyłby bazę wyłączoną świadomie na poziomie wdrożenia. ARCHIWIZACJA NIE KASUJE. Plik zostaje na dysku, zamrożony, ze znacznikiem czasu; znika wyłącznie z użytku. To najdalej idąca operacja osoby wgrywającej dane — kasować może tylko administrator. Test sprawdza, że plik po archiwizacji nadal istnieje, bo to jest cała istota tej operacji. WALIDACJA JEST BRAMKĄ DO UŻYTKU, NIE FILTREM NA WEJŚCIU. Plik wgrany zostaje NIEZALEŻNIE od wyniku — nie tracimy niczego, co ktoś wgrał. Zmienia się tylko to, czy da się go włączyć. Sprawdzenie biegnie też w chwili włączania, nie tylko przy wgrywaniu: reguły mogą się zmienić po fakcie. O WALIDACJI WIE TYLKO ADMINISTRATOR. Pliki wstrzymane są odsiewane W WARSTWIE DANYCH przy for_admin=False, a nie ukrywane w szablonie — gdyby dochodziły do przeglądarki, wystarczyłby podgląd źródła, żeby poznać reguły. Odmowa włączenia wraca do konta bez uprawnień BEZ POWODU, bo powód zdradza regułę. Sekcja reguł nie trafia nawet do źródła strony. Test parametryzowany po obu niższych poziomach szuka w odpowiedzi śladów mechanizmu i wymaga, żeby żadnego nie było. Każdy plik ma policzony sha256 — tożsamość niezależna od nazwy. Wykorzystuje ją już odrzucanie duplikatów, a w kroku drugim posłuży do pilnowania zgodności lustra w SQL. Przy okazji naprawiony błąd, który dopiero co bym wprowadził: Path("") to Path("."), czyli wartość PRAWDZIWA, więc `Path(os.getenv(...)) or domyślna` zawsze wybierało pustą zmienną i zapisywało stan do katalogu bieżącego. Wymaga zapisywalnego udziału — osobny PR w repo deploy. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>