web2py request.args(0)权限

时间:2011-08-10 20:12:54

标签: python database permissions web2py

我正在做一个项目, 这个项目必须有很多用户,每个用户都可以为例子创建许多支持票,他可以看到并编辑它们,但是他不能访问任何其他不属于他的票 例如:

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))用户可以编辑系统中的每个票证,只是为了将id更改为任何其他id,它将起作用 edit_ticket / [id]

所以我用request.args(0)改变了auth.user_id,这是我想的一个很好的解决方案!但是当我们有很多用户时,只有第一和第二用户可以编辑这些票,下一个用户不能这样做并在他们这样做时收到错误“edit_Ticket / [id]”

Error the document doesn't exist

我该怎么做才能阻止用户绕过他们的权限

问候

3 个答案:

答案 0 :(得分:1)

不应该是:

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

因为我们传递函数参数而不是查询条件

答案 1 :(得分:0)

web2py具有内置用户访问控制功能。请参考web2py book

用户应该登录以编辑他们的票证,因此您可以使用@ auth.requires_login()来装饰edit_ticket()。在edit_ticket()中,您可以先检查user_id是否具有ticket_id。

答案 2 :(得分:0)

也许在特定的数据库记录中使用authorization and CRUD(通常是how to set permissions)。

注意,您无法将request.args(0)替换为auth.user_idrequest.args(0)指的是e_ticket记录的id,而不是用户ID。如果e_ticket表包含引用用户ID的字段(例如,e_ticket.user_id),则可以添加user_id=auth.user_id作为条件。

next='view_ticket/[id]'

您应该使用URL()功能来创建网址 - URL(f='view_ticket',args=[id])。此外,[id]应该是什么 - 我在代码中没有看到id的任何引用?