<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div apple-content-edited="true" class=""><div class=""><br class=""></div></div><div><blockquote type="cite" class=""><div class="">Il giorno 05/mar/2015, alle ore 09:36, Alessandro <<a href="mailto:dedalus2000@gmail.com" class="">dedalus2000@gmail.com</a>> ha scritto:</div><br class="Apple-interchange-newline"><div class="">On 02/28/2015 04:15 PM, Giovanni Porcari wrote:<br class=""><blockquote type="cite" class=""><a href="http://www.genropy.org/" class="">http://www.genropy.org/</a><br class=""><br class="">Non è molto documentata (vedi thread sulla lista python.it in questo periodo) ma il programmatore è italiano e ti fornisce assistenza diretta in caso di necessità... Ho messo in copia anche la lista di python, magari riuscite a mettervi in contatto...<br class=""><br class="">Grazie Gollum :)<br class=""></blockquote><br class="">Un paio di domande veloci a riguardo, che credo possano interessare a tutti:<br class="">- cercavo un esempio di gestione delle autorizzazioni/ruoli/privilegi o<br class="">simile. Putroppo non riesco a trovare niente, e dovrei filtrare righe o<br class="">far apparire form un po' diversi in base all'utente correntemente loggato<br class=""></div></blockquote><div><br class=""></div><div>In genropy non esiste un concetto vero e proprio di privilegio quanto di tag di autorizzazione. </div><div>Un utente può avere N tag associati ad esempio: user,admin,_DEV_,tonto,dimissionario etc.</div><div>I tag di autorizzazione dell’utente sono attribuiti in funzione della modalità di autenticazione. </div><div>Ad esempio nella modalità base che è relativa ad utenti definiti nella instanceconfig.xml è possibile</div><div>definire degli utenti che possono usare una certa istanza e assegnare i tag:</div><div><br class=""></div><div><div>        <xml_auth defaultTags="user,xml"></div><div>            <mario pwd=“lasciamientrare" tags="_DEV_,user”/></div><div><div>            <luigi pwd=“nintendo" tags=“user,tonto"/></div></div><div>        </xml_auth></div></div><div><br class=""></div><div>Nell’uso vero però ci si affida di norma al package adm (ciò significa che si può implementare un package di autorizzazione</div><div>specifico/personalizzato) che si occupa di gestire utenti e tag nell’ambito del db.</div><div>In questo caso dovrai definire i tag e gli utenti dal menu del package adm (pagina user e auth tags)</div><div>Quando poi nel codice di una pagina desideri abilitare/disabilitare certe parti solo per certi tag</div><div>hai a disposizione nell’ambito della pagina due modalità </div><div>1. chiamando dalla pagina self.application.checkResourcePermission(rules,self.userTags) </div><div>2. aggiungendo il parametro _tags=rules agli elementi di pagina che vuoi controllare.</div><div><br class=""></div><div>Ad esempio:</div><div>ESEMPIO MODO 1.</div><div>def main(self,root,**kwargs):</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>root.div(‘buongiorno’)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>if self.application.checkResourcePermission(‘admin OR superadmin',self.userTags):</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>root.div(‘Amministratore: da grandi poteri derivano grandi responsabilità’)</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>root.button(‘distruggi tutto’,action=“alert(‘ma sei scemo?')”)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>else:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>root.div(‘Ciao utente’)</div><div><br class=""></div><div>ESEMPIO MODO 2.</div><div><div>def main(self,root,**kwargs):</div><div><span class="Apple-tab-span" style="white-space: pre;">   </span>root.div(‘buongiorno’)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>root.div(‘Amministratore: da grandi poteri derivano grandi responsabilità’,_tags=‘admin OR superadmin')</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>root.button(‘distruggi tutto’,action=“alert(‘ma sei scemo?')”’,_tags=‘admin OR superadmin’)</div><div><br class=""></div><div>Le regole per le interrogazioni di permessi possono essere più complesse e prevedere AND e NOT ad esempio</div><div>‘admin AND !dimissionario'</div></div><br class=""><blockquote type="cite" class=""><div class="">- vedo che ci sono dei metodi accessibili via rpc: è possibile<br class="">sfruttarli anche con script esterni a genropy? potrebbe essere utile<br class="">sfruttare il model per l'inserimento batch di dati, oppure per spedire<br class="">notifiche notturne (fatture scadute, giacenze negative, etc..)<br class=""><br class=""></div></blockquote><div><br class=""></div><div>Certamente! La soluzione più semplice in questi casi è fare una pagina dove puoi raccogliere più metodi</div><div>nell’esempio che segue la pagina (nell’esempio interroga.py) può rendere la lista delle province e delle regioni con gli url</div><div><br class=""></div><div><a href="http://localhost:8090/nomepackage/interroga/lista_province?regione=LOM" class="">http://localhost:8090/nomepackage/interroga/lista_province?regione=LOM</a></div><div><div><a href="http://localhost:8090/nomepackage/interroga/" class="">http://localhost:8090/nomepackage/interroga/</a>lista_regioni</div><div class=""><br class=""></div></div><div><br class=""></div><div><div><div>from gnr.core.gnrdecorator import public_method</div><div><br class=""></div><div>class GnrCustomWebPage(object):</div><div>    py_requires='gnrcomponents/externalcall:BaseRpc'</div><div><br class=""></div><div>    @public_method</div><div>    def lista_province(self,regione=None,**kwargs):</div><div>         where = '$regione=:r' if regione else None</div><div>         return self.db.table('glbl.provincia').query(where=where,r=regione).fetch()</div><div><br class=""></div><div><div>    @public_method</div><div>    def lista_regioni(self,**kwargs):</div><div>         return self.db.table('glbl.regione').query().fetch()</div><div><br class=""></div><div>Inoltre sono previsti dei cron che permettono di lanciare certi compiti (task) ad orari e giorni definiti.</div></div></div></div></div><div class=""><br class=""></div>Spero di esser stato abbastanza chiaro. Se hai altri dubbi sono qui :)<br class=""><div class=""><br class=""></div><div class=""><div class="">Ing. Francesco "Ghigo" Porcari</div><div class=""><a href="mailto:francesco.porcari@softwell.it" class="">francesco.porcari@softwell.it</a></div><div class="">Twitter: @fporcari</div><div class="">WEB: <a href="http://www.genropy.org" class="">www.genropy.org</a></div></div><div class=""><br class=""></div></body></html>