2011-08-10 27 views
0

我工作的一个项目, 这个项目必须有许多用户,每个用户都可以对很多的例子支持票创造,他可以看到他们和编辑它们,但他不允许访问任何其他的票,这不属于他 因此,例如:的web2py request.args中(0)权限

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,并将工作 edit_ticket/[id]

所以我改变了request.args(0)auth.user_id,这是一个很好的解决方案,因为我以为!但是当我们已经很多用户因此只有第1和2ED用户可以编辑本thier门票接下来用户无法做到这一点,当他们这样做收到错误“edit_Ticket/[ID]”

Error the document doesn't exist 

我应该怎么如何防止用户绕过他们的特权

问候

回答

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

因为在这里我们传递函数的参数,而不是查询条件

0

的web2py已经的buildin用户访问控制。请参考web2py book

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

0

也许考虑使用authorization and CRUD(一般how to set permissions于特定的数据库记录)。

注意,你不能用auth.user_id取代request.args(0)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的内容?

+0

它不应该: 'db.e_ticket(request.args中(0),USER_ID == auth.user_id,活性== TRUE)' 但 'db.e_ticket(request.args中(0),USER_ID = auth.user_id,积极= TRUE)' - 因为在这里他们是函数的参数,而不是查询条件!谢谢 – ElTero

+0

哎呀,你是对的(和web2py的在线图书是错误的 - 那会被纠正)。我已经编辑了相应的上述内容。 – Anthony