Bookmark and Share
Document Actions

"Cattive norme", o cose da evitare
difficile

Utili suggerimenti dalla presentazione di Stefan intitolata "Top Twenty Plone Pitfalls".

Alla Plone Conference 2006, Stefan Holek ("lurker") ha presentato un applaudito seminario intitolato "Top Twenty Plone Pitfalls". Si può  leggere l'intera presentazione o guardarla online

Alcuni dei trabocchetti da lui suggeriti sono molto utili agli sviluppatori di prodotti Plone, in questa pagina sono stati adattati in una serie di "cattive norme" di programmazione, o cose da evitare.

 

Non sviluppare la logica dell'applicazione in TALES.

I template sono progettati per presentare, e solo per questo. Tutta la logica della propria applicazione dovrebbe essere scritta in Python (script, tool, ecc.). Se ci si trova a creare complicate strutture nei propri template, è meglio fermarsi un attimo e pensare a come fare in modo di far funzionare tutto grazie a uno script scritto in Python. Con espressioni scritte in TALES sarà difficile eseguire operazioni di manutenzione e di debug, oltre a rendere il prodotto poco comprensibile per gli altri.

Stefan suggerisce scherzando di fare una piccola donazione alla Plone Foundation ogni qual volta si usa codice Python in un Page Template. ;-)

 

Non imporre un modello relazionale ad un database ad oggetti.

Non ci si deve aspettare che lo ZODB lavori come MySQL.  Non è così. Lo ZODB è un database ad oggetti, non un database relazionale. Quindi è bene progettare la propria applicazione ad oggetti, piuttosto che come righe di dati in una tabella. Viceversa, non c'è nulla di sbagliato nell'utilizzare un RDBMS con Plone, se i propri dati lo richiedono. Il modo più comune per far ciò è usare un connettore di database e metodi ZSQL per leggere/scrivere dati dal proprio RDBMS

Utili fonti su come fare queste operazioni sono:

 

Non controllare i ruoli, ma i permessi.

  • Perché gli oggetti e i metodi sono protetti dai permessi, e non dai ruoli
  • Usare portal_membership.checkPermission.

 

Non usare REQUEST.AUTHENTICATED_USER.

  • AUTHENTICATED_USER non è sicuro, da molto lo si sa e si cerca di non usarlo mai
  • Usare portal_membership.getAuthenticatedMember

 

Non usare il ruolo "Autenticato" per configurare la sicurezza del proprio sito.

  • Il ruolo "Autenticato" ("Authenticated") è un ruolo che serve al sistema, ma non a gestire la sicurezza.
  • Aggiungere i propri ruoli personalizzati.

 

Non usare ruoli proxy.

  • I ruoli di tipo "proxy" ("Proxy roles") sono simili agli script SUID in *nix.
  • Fare molta attenzione ai propri script basati su Proxy; si stanno probabilmente creando buchi nella sicurezza del proprio sito.

 

Non dimenticare di aggiungere dichiarazioni di sicurezza ai propri metodi, di default sono (!) pubblici.

  • Perchè Item, che è la classe fondamentale per la maggior parte degli oggetti in Zope2, permette di accedere ad attributi non protetti.
  • Essere sempre particolarmente attenti con i tool. I metodi potrebbero richiedere di essere pubblici e di dover eseguire propri controlli di sicurezza.

  

Non richiamare getObject in risultati da catalog.

  • getObject usa internamente restrictedTraverse.
  • Aggiungere tutto ciò che serve come metadati in catalog.

 

Non usare né contentValues né objectValues.

  • contentValues/objectValues "risveglia" subobjects, per esempio, caricarli dal disco nella memoria.
  • objectIds può essere usato, eventualmente, ma non contentIds.

 

Non ritornare oggetti dagli scripts, ritornare (liste di) dizionari.

  • Gli oggetti non possono essere messi nella RAM-cache.
  • La sicurezza degli oggetti verrà controllata.
  • Gli script Python sono i primi obiettivi della RAM-cache.

 

Non elaborare nulla al volo mentre si sta visualizzando.

  • Elaborare solo al momento giusto, quando i dati vengono inseriti, e salvare tutto.

 

Non "toccare" gli oggetti mentre li si sta visualizzando.

  • Visualizzare un oggetto non deve causare una modifica dei dati del database.
  • È facile causare accidentalmente una modifica; usare il tab Undo per controllare.
 
by Alice Narduzzo last modified 2009-12-07 12:28