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

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

0 голосов
/ 11 августа 2011

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

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

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

С уважением

Ответы [ 3 ]

1 голос
/ 13 августа 2011

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

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

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

0 голосов
/ 11 августа 2011

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

Обратите внимание, вы не можете заменить request.args(0) с auth.user_id.request.args(0) относится к идентификатору записи e_ticket, а не к идентификатору пользователя.Если в таблице 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 в коде?

0 голосов
/ 11 августа 2011

web2py имеет встроенный контроль доступа пользователя.пожалуйста, обратитесь к web2py book :

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

...