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