2013-06-14 3 views
0

나는 다른 사용자가 만드는 게시물을 보여주는 페이지가 있으며, 사용자가 인덱스로 이동하면 해당 사용자의 user_id =가 현재 사용자에게 표시되도록 할 수있었습니다. user_id . 그러나 URL로 이동하여 게시물 번호를 변경하면 다른 사용자의 소식을 볼 수 있으며 편집 할 수도 있습니다. 컨트롤러를 변경하려고 시도했습니다 @time_sheets = TimeSheet.where(:user_id => current_user.id)find(params[:id]) 또한보기에서 <% if @time_sheet.user_id == @currentuser.id %>을 사용해 보았지만 둘 다 작동하지 않는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?다른 사용자가 다른 사용자의 게시물을 볼 수 없도록 설정

+0

에 대한 자세한 내용을보실 수 있습니다 [RailsCasts 에피소드] (http://railscasts.com/episodes/385-authorization-from-scratch-part-1), 이것과 두 번째 에피소드를 확인 아마 가장 좋은 인증 방법. 승인 한 대답은 certian 링크의 그의 게시물을 current_user에게 보여 주지만 다른 게시물에는 액세스 할 수 없습니다. –

+0

어떻게 사람이 액세스 할 것인가? URL을 통해 질문을 시도했지만 현재 귀하의 게시물이 아닌 게시물을 쿼리하려고하면 404가 표시됩니다. –

+0

http : // localhost : 3000/timesheets/: id/edit (실제 아이디 여야 함) 시도해보십시오 (올바른 포트 또는 리소스 이름이 아닌 경우 올바른 번호를 입력하십시오) –

답변

-2

컨트롤러에서는이 있어야합니다 당신은 연결 사용자 has_many 작업 표가있는 경우

@time_sheet = TimeSheet.where(user_id: current_user.id).find(params[:id]) 

또는 :

@time_sheet = current_user.time_sheets.find(params[:id]) 

그것은 작동합니다.

아직이 코드를 호출하기 전에 누군가가 로그인했는지 확인해야합니다.

+0

위대한 기능을 수행했으며, 오류 페이지를 표시하려고하면 오류 페이지가 표시되지 않습니다. –

+0

404 올바르게 기억되면 404가 기본적으로 표시됩니다. 이거 나쁜거야? "잘됐다"면 답변을 수락 하시겠습니까? :) –

+0

아, 레일에 새로 왔고 로컬로 실행 중이므로 돌아 오지 않는 방법을 보여주는 페이지로 리디렉션됩니다. 프로덕션으로 이동하면이 페이지 대신에 바로 404가됩니다. –

2

before_filter를 사용하고 다른 사용자의 페이지에 액세스하려고하면 오류 메시지가 표시된 홈 페이지로 사용자를 리디렉션 할 수 있습니다.

before_filter :validate_user 

def validate_user 
    timesheet_user_id = Timesheet.find(params[:id]).user_id 
    redirect_to :root, :alert => "Unauthorized" unless timesheet_user_id == current_user.id 
end 

당신은 필터 here

+0

'params [: id]'는 사용자 ID가 아닌 time_sheet id입니다. –

+0

답변 수정 – usha

관련 문제