Jaký je podle Vás nejlepší způsob jak vytvořit File Manager z následujícímy požadavky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
filcau
Člen | 6
+
0
-

Pro své CMS chystám napsat kvalitní file manager. Pro představu Vám nastíním, co vše by měl umět a poté můj problém se kterým bych od Vás chtěl poradit.

  • Práva na čtení, mazání a zveřejnění souborů
  • Vytvářet miniatury
  • Administrační nastavení, jako je typ povolených souborů, nebo velikost úložiště
  • multi uploud
  • vytváření složek, přesuny souborů, nebo složek
  • Čtení textových souborů, PDF…

a další fíčurky.

Problém není to napsat, ale trápí mě jedna věc, jelikož jsou tam ňáká ta práva na zobrazování souborů jako jsou běžně obrázky na produkční stránce tak se vždy daný požadavek musí zpracovat a to je ten problém.

Samotný požadavek není problém, ale jeho rychlost. Když si představíte 50 miniatur o velikosti 20KB. Kde jedna miniatura bez žádného ověření se vrátí zhruba za 30ms je pohoda. Ale když se u každého požadavku bude načítat Nette + nějaký ten model, tak se dostaneme na 100–150ms u každého požadavku a to už není tak pěkné a jeto vidět i na samotném webu, že obrázky lezou pomalu.

Jak to vlastně dělám. Celou aplikaci mám rozdělenou na několik částí. Část, která je zaměřena na výdej souboru se spustí ve chvílí, kdy přijde požadavek na domena.cz/getfile/id kde se nepoužívá Nette routování, ale natvrdo v index.php se načte nette a k tomu třída, která obstarává výdejní procesy:

  • Vytáhne z databáze informace o požadovaném souboru
  • Ověří práva na čtení souboru
  • Vytvoří potřebnou hlavičku

Má otázka zní, jak dosáhnout rychlejšího výsledku, nebo jak byste to udělali vy?

akadlec
Člen | 1326
+
+1
-

Tak zrychlení můžeš udělat třeba tak že už při vykreslování šablon provedeš kontrolu těch práv a podle toho tam hodíš soubor. Samo pokud chceš ověřovat všechny požadavky na server zda má či nemá přístup aby se nedal poslat direct link tak pak se asi tomu cos popsal nevyhneš, resp. mě osobně nic jiného nenapadá.

filcau
Člen | 6
+
0
-

Jo tak to mě nenapadlo, ale mohlo by to být tak že při generování šablony bych vytvořil nějaký token, který bych přidal k linku na obrázek, nebo soubor a při výdeji bych jen ověřil platnost.
No a použil bych session, abych se nemusel připojovat k DB nebo nějaký jiný nápad?

akadlec
Člen | 1326
+
0
-

No to bych řek že ti to moc neřeší, protože ten token se taky bude dát zkopírovat. Resp. co chceš tímto ošetřit? Aby se uživatel A co má přístup k souboru X na ten soubor mohl podívat ale uživatel B co ten přístup nemá nemohl?

iguana007
Člen | 970
+
0
-

Já jsem dělal něco podobného (sice ne pro file manager, ale princip je stejný) a řešil jsem to tak, že jsem si via ACL natáhnul aktuální strom práv do cache a pak to jen tahal z cache. Cache se invalidovala pouze při změně práv uživatele nebo změně práv u položky (např. změna groupy, která k tomu má přístup). Na ACL jsem v podstatě jako základ použil ACL GUI Addon a trošku si jej upravil: https://forum.nette.org/…control-list