Here is the correct version (my previous post, which I deleted, was another 
version):

#@auth.requires_signature()
@auth.requires_login()
def index():
    # type: () -> Dict[str, gluon.DIV]
    """Index page.

    :return: Dict with grid.
    """
    if session.return_to:
        del session.return_to

    session.table = 'opt_cat'

    # Hidden fields in grid and edit/view form.
    db.opt_cat.id.readable = False

    db.opt_cat.one_opt_only.show_if = db.opt_cat.mandatory == False

    if SUPERVISOR_ROLE_ID in auth.user_groups:
        # Uses covering index opt_cat_is_active_name_en.
        # Uses auto index sqlite_autoindex_opt_cat_1.
        grid = SQLFORM.grid(
            db.opt_cat,
            csv=False,
            details=False,
            # Disable delete checkbox in edit form.
            editargs=dict(deletable=False),
            maxtextlength=GRID_COL_LEN_FOR_TEXT,
            ondelete=on_delete,  # Grid only.
            onvalidation=on_validation,  # And onupdate are form only.
            orderby=db.opt_cat.name,
            paginate=session.auth.user.pagination,
            # represent_none='',  # Grid and view form only.
        )  # type: gluon.DIV
    else:
        # Hidden fields in grid and edit/view form.
        db.opt_cat.canceled_on.readable = False
        db.opt_cat.canceled_by.readable = False
        db.opt_cat.cancel_approved_by.readable = False

        # Uses covering index opt_cat_is_active_name_en (is_active=?).
        # Uses index opt_cat_is_active_name (is_active=?).
        grid = SQLFORM.grid(
            db.opt_cat.is_active == True,
            create=False,
            csv=False,
            deletable=False,
            details=False,
            editable=False,
            maxtextlength=GRID_COL_LEN_FOR_TEXT,
            orderby=db.opt_cat.name,
            paginate=session.auth.user.pagination,
            # represent_none='',  # Grid and view form only.
        )

    # Remove icons from default buttons.
    grid.elements('span.icon', replace=None)

    if request.args:
        # Remove delete button.
        grid.element('#delete_with_approval', replace=None)

    if not request.args:
        # Sort grid's search fields list.
        grid.element('#w2p_query_fields').components = 
sort_grid_search_fields_list(grid)

        if session.opt_cat_modified_on:
            del session.opt_cat_modified_on
    elif 'edit' in request.args:
        # Edit uses opt_cat Pk.

        form = grid.update_form  # type: gluon.sqlhtml.SQLFORM
        # form['hidden'].update(mon=form.record.modified_on)
        # Solves the record changed while editing, but doesn't solve it
        # if the user 1st tries something that returns form.errors (eg.
        # changing a unique field to something that already exists) and
        # only after that he tries to save the record (which was changed
        # by another user). For this the only solution I've found was
        # using a session var.

        if not session.opt_cat_modified_on:
            session.opt_cat_modified_on = form.record.modified_on

        if not form.record.is_active and not SUPERVISOR_ROLE_ID in auth.
user_groups:
            session.flash = T('Record was deleted while you were viewing 
the grid.')
            redirect(URL(user_signature=True))

    return dict(grid=grid)




domingo, 21 de Abril de 2019 às 17:22:44 UTC+1, Anthony escreveu:
>
> On Sunday, April 21, 2019 at 10:53:08 AM UTC-4, João Matos wrote:
>>
>> I wanted to have signed URL everywhere.
>> For that, I added user_signature=True to all my URL(). The grid has that 
>> as a default.
>> At this point everything worked with @requires_login() except one special 
>> case (I believe this special case may be related to the same issue I'm 
>> facing with this I describe here).
>>
>> Then I added a var called sid (for session id) to every URL() which I use 
>> to identify the session (this way I'm able to distinguish ebetween 2 
>> browser tabs).
>> At this point everything worked with @requires_login() except the special 
>> case I mentioned above.
>>
>> Then I replaced @auth.requires_login() with @auth.requires_signature() 
>> and I'm able to access the grid but not the edit form. I receive a Not 
>> Authorized message.
>>
>> In all these tests I'm logged in.
>>
>> If I remove the sid var and keep the @auth.requires_signature() 
>> everything works.
>>
>> If I replace the@auth.requires_signature() with @auth.requires_login() 
>> and keep the sid var everything works.
>>
>> Only the combination of both doesn't work.
>>
>
> Need to see the code.
>

-- 
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