我正在做一个项目, 这个项目必须有很多用户,每个用户都可以为例子创建许多支持票,他可以看到并编辑它们,但是他不能访问任何其他不属于他的票 例如:
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
我该怎么做才能阻止用户绕过他们的权限
问候
答案 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_id
。 request.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
的任何引用?