https://docs.python.org/2/library/functions.html#any

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

so any() return true if one (or more) of the elements is True.


this:

auth.has_membership(role) for role in list_of_roles

try all the roles in the list.

so if one of the auth.has_membership() return true, the lamba function
return true.



2017-04-20 14:36 GMT+02:00 Andrea Fae' <and...@gmail.com>:

> But... "any"? I need some more information about lambda I think....where
> to find this syntax with any?
> where is written what you told about evaluation?
> Thank you very much
>
>
> Il giorno mercoledì 19 aprile 2017 17:30:06 UTC+2, Anthony ha scritto:
>>
>> First, when using auth.requires(), it is best to put the test inside a
>> lambda (or standard function) so it will not be evaluated until the
>> decorated function is actually called (otherwise, the test will be
>> evaluated whenever the controller file is accessed).
>>
>> Anyway, you can do something like this:
>>
>> list_of_roles = ['role1', 'role2', 'role3'] # You could get this list
>> via a database query
>>
>> @auth.requires(lambda: any(auth.has_membership(role) for role in
>> list_of_roles))
>> def myfunc():
>>     ...
>>
>> Anthony
>>
>> On Wednesday, April 19, 2017 at 8:14:53 AM UTC-4, Andrea Fae' wrote:
>>>
>>> For example I have this type of functions:
>>>
>>> # sono autorizzati i vari manager a seconda della sede
>>> @auth.requires(auth.has_membership('Total-manager') |
>>> auth.has_membership('Conegliano-studente') |
>>> auth.has_membership('Pordenone-manager') |
>>> auth.has_membership('Pordenone-studente') |
>>> auth.has_membership('Udine-studente'))
>>> def appuntamenti_studente():
>>>      # recupero lo studente selezionato
>>>     studente = request.args(0)
>>>     # recupero il gruppo
>>>     # query per recuperare il nome  dello studente
>>>     query_nome_studente = db.auth_user.id == studente
>>>     # recupero nome e cognome dello studente
>>>     row = db(query_nome_studente).select(db.auth_user.first_name,db.
>>> auth_user.last_name).first()
>>>     #seleziono gli eventi dello studente
>>>     query = (db.evento.studenti.contains(studente))
>>>     eventi_stud = db(query).select()
>>>     # imposto la grid per far vedere gli eventi dello studente
>>>     exportcls = dict(csv_with_hidden_cols=False, html=False,
>>> json=False, tsv_with_hidden_cols=False, tsv=False)
>>>     # solo se lo studente corrisponde a chi si è loggato
>>>     if (str(auth.user.id) == studente):
>>>         #print 'sono al form normale'
>>>         form = SQLFORM.grid(query, args=[studente],
>>> fields=[db.evento.titolo, db.evento.inizio,db.evento.fine,db.evento.risorsa,
>>> db.evento.materia,db.evento.docente],create=False, details=False,
>>> editable=False, deletable=False, maxtextlength=60, exportclasses =
>>> exportcls)
>>>     else:
>>>         redirect(URL('default','index'))
>>>     return locals()
>>>
>>> I'm testing different "fixed" values in the @auth.requires, but they can
>>> be more or less depending on how many roles are in the db. I'd like to do
>>> this dynamically from the db, extracting and compising this @auth.requires
>>> line in dynamic way. Is it possible? Do you have any examples? Thank you
>>>
>> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to