hi anthony,
thank for your explaination, but i'm sorry, i'm still not understand. i've
already tried to learn from trial and error like the code that i've shown
above. the unexpected result above, is mean that i can not view the page
that is authorize to me (as an *admin membership*). the strange behaviour
on my second post is when i submit the data in form, it won't work.
my goal is to set the function that can be used by another function. let
say __grid_0() can be used by manage_blog() and manage_news() for example
here is the code that i'm tried :
*#model*
db.define_table('blog',
Field('title'),
Field('contents', 'text'),
format='%(title)s')
#controller work for a moment
# pagination function
def __pagination_0(flash, table, active):
response.flash=T(flash)
if len(request.args):
page=int(request.args[0])
else:
page=0
items_per_page=10
limitby=(page*items_per_page, (page+1)*items_per_page+1)
rows=db(active==True).select(limitby=limitby, orderby=~table.id,
cache=(cache.ram, 10))
return dict(rows=rows, page=page, items_per_page=items_per_page)
# grid function
@auth.requires(auth.has_membership(role = 'Admin'))
def __grid_0(flash, table):
response.flash=T(flash)
has_membership=auth.has_membership('Admin')
grid=SQLFORM.smartgrid(table, user_signature=False,
onupdate=auth.archive,
create=has_membership, editable=has_membership,
deletable=has_membership)
return dict(grid=grid)
blog_flash="Blog"
blog_db=db.blog
blog_active=db.blog.is_active
blog_manage_flash="Manage Blog"
# blog
def blog():
return __pagination_0(blog_flash, blog_db, blog_active)
# manage_blog
def manage_blog():
return __grid_0(blog_manage_flash, blog_db)
*#view*
*blog.html*
{{extend 'layout.html'}}
{{for i,row in enumerate(rows):}}
{{if i==items_per_page: break}}
{{=DIV(H2(row.title))}}
{{=DIV(row.contents)}}
{{=prettydate(row.created_on)}}
{{=BR()}}
{{pass}}
{{if page:}}
{{=SPAN(A(T('< Previous'), _href=URL(args=[page-1]), _title=T('Previous
Page')))}}
{{pass}}
{{if len(rows) > items_per_page:}}
{{=SPAN(A(T('Next >'), _href=URL(args=[page+1]), _title=T('Next Page')))}}
{{pass}}
*manage_blog.html*
{{extend 'layout.html'}}
{{=grid}}
On Monday, February 11, 2013 9:49:29 PM UTC+7, Anthony wrote:
>
> These should be equivalent, though technically
> @auth.requires_membership('Admin') is equivalent to @auth.requires(lambda:
> auth.has_membership(role='Admin')). Using the lambda prevents unnecessary
> database hits checking for membership in cases where the controller file is
> executed but the specific decorated function is not called.
>
> Perhaps you can post a minimal app that reproduces the problem.
>
> Anthony
>
> On Sunday, February 10, 2013 11:40:45 PM UTC-5, 黄祥 wrote:
>>
>> hi,
>>
>> what is the difference within :
>> @auth.requires_membership('Admin') and
>> @auth.requires(auth.has_membership(role = 'Admin'))
>> it seems there is some limitation in @auth.requires_membership('Admin')
>>
>> e.g.
>> *case 1 :*
>> *as expected result*
>> *@auth.requires(auth.has_membership(role = 'Admin')) ### the difference*
>> def __grid_0(flash, table):
>> response.flash=T(flash)
>> has_membership=auth.has_membership('Admin')
>> grid=SQLFORM.smartgrid(table, onupdate=auth.archive,
>> create=has_membership,
>> editable=has_membership,
>> deletable=has_membership)
>> return dict(grid=grid)
>>
>> def manage_blog():
>> return __grid_0(blog_manage_flash, blog_db)
>>
>> *unexpected result*
>> *@auth.requires_membership('Admin') ### the difference*
>> def __grid_0(flash, table):
>> response.flash=T(flash)
>> has_membership=auth.has_membership('Admin')
>> grid=SQLFORM.smartgrid(table, onupdate=auth.archive,
>> create=has_membership,
>> editable=has_membership,
>> deletable=has_membership)
>> return dict(grid=grid)
>>
>> def manage_blog():
>> return __grid_0(blog_manage_flash, blog_db)
>>
>> what i mean for unexpected result is, the user with the membership of
>> group 'Admin' can not see the manage_blog page, when i modified it with
>> *@auth.requires(auth.has_membership(role
>> = 'Admin'))*, the user with the membership of group 'Admin' can see the
>> manage_blog page.
>>
>> is there anyone know about it?
>>
>> thank you so much in advance
>>
>
--
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.