> Il giorno 05/mar/2015, alle ore 09:36, Alessandro <dedalus2...@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.porc...@softwell.it
Twitter: @fporcari
WEB: www.genropy.org

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Reply via email to