разрешения web2py request.args(0)

Я работаю над проектом, в этом проекте должно быть много пользователей, каждый пользователь может создавать, например, много заявок в службу поддержки, и он может их видеть и редактировать, но ему не разрешен доступ ни к одной другой заявке, которая ему не принадлежит, поэтому Например :

def edit_ticket():
    record = db.e_ticket(request.args(0),active=True) or redirect(URL('error'))
    form=crud.update(db.e_ticket,record,next='view_ticket/[id]')
    return dict(form=form)

таким образом, с помощью (request.args(0)) пользователь может редактировать каждый билет в системе, просто чтобы изменить идентификатор на любой другой идентификатор, и он будет работать edit_ticket/[id]

поэтому я заменил request.args(0) на auth.user_id, как я и думал, это было отличное решение! но когда у нас много пользователей, поэтому только 1-й и 2-й пользователи могут редактировать эти свои билеты, следующие пользователи не могут этого сделать и получают сообщение об ошибке, когда они делают это «edit_Ticket/[id]»

Error the document doesn't exist

что я должен сделать, чтобы пользователи не могли обойти свои привилегии

С Уважением


person Elteroooo    schedule 10.08.2011    source источник


Ответы (3)


не должно быть:

db.e_ticket(request.args(0),user_id==auth.user_id,active==True)

но

db.e_ticket(request.args(0),user_id=auth.user_id,active=True) -

потому что здесь мы передаем аргументы функции, а не условия запроса

person Elteroooo    schedule 13.08.2011

web2py имеет встроенный контроль доступа пользователей. см. книгу web2py:

пользователи должны войти в систему, чтобы отредактировать свой билет, поэтому вы можете использовать @auth.requires_login() для украшения edit_ticket(). В edit_ticket() вы можете сначала проверить, есть ли у user_id ticket_id.

person HYRY    schedule 10.08.2011

Возможно, следует рассмотреть возможность использования авторизации и CRUD (и вообще как установить разрешения для определенных записей базы данных).

Обратите внимание, что вы не можете заменить request.args(0) на auth.user_id. request.args(0) относится к идентификатору записи электронного билета, а не к идентификатору пользователя. Если таблица e_ticket содержит поле, ссылающееся на идентификатор пользователя (например, e_ticket.user_id), вы можете добавить user_id=auth.user_id в качестве условия.

next='view_ticket/[id]'

Вы должны использовать функцию URL() для создания URL-адресов -- URL(f='view_ticket',args=[id]). Кроме того, что должно быть [id] -- я не вижу никаких ссылок на id в коде?

person Anthony    schedule 11.08.2011
comment
это не должно: db.e_ticket(request.args(0),user_id==auth.user_id,active==True) но db.e_ticket(request.args(0),user_id=auth.user_id,active=True) - потому что здесь это аргументы функции, а не условия запроса!, спасибо - person Elteroooo; 13.08.2011
comment
К сожалению, вы правы (и онлайн-книга web2py неверна - это будет исправлено). Я отредактировал вышеприведенное соответственно. - person Anthony; 13.08.2011