[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