2011-08-10 4 views
0

나는이 프로젝트가 많은 사용자를 필요로하는 프로젝트에서 작업하고 있습니다. 각 사용자는 많은 지원 티켓을 만들 수 있습니다. 그리고 그는 그들을보고 편집 할 수 있지만 허용되지 않습니다. 다른 모든 ID에 ID를 변경하려면 시스템의 모든 티켓을 편집 할 수 있습니다 (request.args(0)) 사용자와 이런 식으로web2py request.args (0) permissions

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) 

과 : 예를 들어 그래서 그에게 속하지 다른 티켓을 액세스 할 수 작동 할 것입니다 edit_ticket/[id]

그래서 변경되었습니다. request.args(0)auth.user_id과 함께 사용하면 멋진 솔루션이되었습니다. 하지만 우리는 많은 사용자를했습니다 그래서 단지 1, 2ed 사용자가 다음 사용자가 할 수 없어이, 자신의 티켓을 편집하고이 수행 할 때 "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)을 사용합니다.

request.args(0)auth.user_id으로 바꿀 수는 없습니다. request.args(0)은 사용자 ID가 아닌 e_ticket 레코드의 id를 참조합니다. e_ticket 테이블에 사용자 ID (예 : e_ticket.user_id)를 참조하는 입력란이있는 경우 user_id=auth.user_id을 조건으로 추가 할 수 있습니다. URL(f='view_ticket',args=[id]) -

next='view_ticket/[id]' 

당신은 URL을 만들 수 URL() 기능을 사용해야합니다. 또한 [id]은 무엇입니까? - 코드에 id에 대한 참조가 표시되지 않습니까?

+0

는 안 : 'db.e_ticket (request.args (0), user_id == auth.user_id, 활성 == 참) ' 하지만 'db.e_ticket (request.args (0), user_id = auth.user_id, active = True) ' - 여기서 함수 인수가 아니고 쿼리 조건이 아니기 때문에!, 고맙습니다. – ElTero

+0

죄송합니다. web2py 온라인 서적은 잘못되었습니다 - 정정 될 것입니다). 그에 따라 위의 내용을 편집했습니다. – Anthony