[Python] programmi di gestione via web...modificabili.

Francesco Porcari francesco.porcari a softwell.it
Gio 5 Mar 2015 18:46:08 CET


> Il giorno 05/mar/2015, alle ore 09:36, Alessandro <dedalus2000 a gmail.com> ha scritto:
> 
> On 02/28/2015 04:15 PM, Giovanni Porcari wrote:
>> http://www.genropy.org/
>> 
>> 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...
>> 
>> Grazie Gollum :)
> 
> Un paio di domande veloci a riguardo, che credo possano interessare a tutti:
> - cercavo un esempio di gestione delle autorizzazioni/ruoli/privilegi o
> simile. Putroppo non riesco a trovare niente, e dovrei filtrare righe o
> far apparire form un po' diversi in base all'utente correntemente loggato

In genropy non esiste un concetto vero e proprio di privilegio quanto di tag di autorizzazione. 
Un utente può avere N tag associati ad esempio: user,admin,_DEV_,tonto,dimissionario etc.
I tag di autorizzazione dell’utente sono attribuiti in funzione della modalità di autenticazione. 
Ad esempio nella modalità base che è relativa ad utenti definiti nella instanceconfig.xml è possibile
definire degli utenti che possono usare una certa istanza e assegnare i tag:

        <xml_auth defaultTags="user,xml">
            <mario pwd=“lasciamientrare" tags="_DEV_,user”/>
            <luigi pwd=“nintendo" tags=“user,tonto"/>
        </xml_auth>

Nell’uso vero però ci si affida di norma al package adm (ciò significa che si può implementare un package di autorizzazione
specifico/personalizzato) che si occupa di gestire utenti e tag nell’ambito del db.
In questo caso dovrai definire i tag e gli utenti dal menu del package adm (pagina user e auth tags)
Quando poi nel codice di una pagina desideri abilitare/disabilitare certe parti solo per certi tag
hai a disposizione nell’ambito della pagina due modalità 
1. chiamando dalla pagina self.application.checkResourcePermission(rules,self.userTags) 
2. aggiungendo il parametro _tags=rules agli elementi di pagina che vuoi controllare.

Ad esempio:
ESEMPIO MODO 1.
def main(self,root,**kwargs):
	root.div(‘buongiorno’)
	if self.application.checkResourcePermission(‘admin OR superadmin',self.userTags):
		root.div(‘Amministratore: da grandi poteri derivano grandi responsabilità’)
		root.button(‘distruggi tutto’,action=“alert(‘ma sei scemo?')”)
	else:
		root.div(‘Ciao utente’)

ESEMPIO MODO 2.
def main(self,root,**kwargs):
	root.div(‘buongiorno’)
	root.div(‘Amministratore: da grandi poteri derivano grandi responsabilità’,_tags=‘admin OR superadmin')
	root.button(‘distruggi tutto’,action=“alert(‘ma sei scemo?')”’,_tags=‘admin OR superadmin’)

Le regole per le interrogazioni di permessi possono essere più complesse e prevedere AND e NOT ad esempio
‘admin AND !dimissionario'

> - vedo che ci sono dei metodi accessibili via rpc: è possibile
> sfruttarli anche con script esterni a genropy? potrebbe essere utile
> sfruttare il model per l'inserimento batch di dati, oppure per spedire
> notifiche notturne (fatture scadute, giacenze negative, etc..)
> 

Certamente! La soluzione più semplice in questi casi è fare una pagina dove puoi raccogliere più metodi
nell’esempio che segue la pagina (nell’esempio interroga.py) può rendere la lista delle province e delle regioni con gli url

http://localhost:8090/nomepackage/interroga/lista_province?regione=LOM <http://localhost:8090/nomepackage/interroga/lista_province?regione=LOM>
http://localhost:8090/nomepackage/interroga/ <http://localhost:8090/nomepackage/interroga/>lista_regioni


from gnr.core.gnrdecorator import public_method

class GnrCustomWebPage(object):
    py_requires='gnrcomponents/externalcall:BaseRpc'

    @public_method
    def lista_province(self,regione=None,**kwargs):
         where = '$regione=:r' if regione else None
         return self.db.table('glbl.provincia').query(where=where,r=regione).fetch()

    @public_method
    def lista_regioni(self,**kwargs):
         return self.db.table('glbl.regione').query().fetch()

Inoltre sono previsti dei cron che permettono di lanciare certi compiti (task) ad orari e giorni definiti.

Spero di esser stato abbastanza chiaro. Se hai altri dubbi sono qui :)

Ing. Francesco "Ghigo" Porcari
francesco.porcari a softwell.it
Twitter: @fporcari
WEB: www.genropy.org

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150305/5fd86e59/attachment-0001.html>


Maggiori informazioni sulla lista Python