Python web2py请求。args(0)权限

Python web2py请求。args(0)权限,python,database,permissions,web2py,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 d

我在做一个项目, 该项目必须有许多用户,每个用户可以创建许多支持票证,例如,他可以查看和编辑这些票证,但不允许他访问不属于他的任何其他票证 例如:

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即可 编辑\u ticket/[id]

因此,我用
auth.user\u id
更改了
request.args(0)
,正如我所想,这是一个很好的解决方案!但是当我们有很多用户时,只有第一个和第二个用户可以编辑他们的票证,而下一个用户则不能这样做,当他们这样做时会收到一个错误“edit_Ticket/[id]”

我应该如何防止用户绕过他们的权限


考虑到web2py具有内置用户访问控制。请参阅:

用户应该登录以编辑他们的票证,因此您可以使用@auth.requires\u login()来编辑票证()。在edit_ticket()中,您可以先检查用户id是否具有票据id。

可能会考虑使用(通常在特定的数据库记录上)

注意,不能将
request.args(0)
替换为
auth.user\u id
request.args(0)
引用的是e_票证记录的id,而不是用户id。如果e_票证表包含引用用户id的字段(例如,e_票证.user_id),则可以添加
user_id=auth.user_id
作为条件

next='view_ticket/[id]'
您应该使用
URL()
函数创建URL--
URL(f='view\u ticket',args=[id])
。另外,
[id]
应该是什么——我在代码中没有看到任何对
id
的引用?

它不应该是:

db.e\u票证(request.args(0),user\u id==auth.user\u id,active==True)

但是

db.e\u票据(request.args(0),user\u id=auth.user\u id,active=True)
-


因为这里我们传递的是函数参数而不是查询条件,所以它不应该:
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)
,因为这里它们是函数参数而不是查询条件!,谢谢你哦,你是对的(web2py在线图书是错的——这将得到纠正)。我已对上述内容进行了相应的编辑。
next='view_ticket/[id]'