2010-08-20 4 views
0

게시물을 입력/편집 할 수있는 권한이 있습니다.Rails에서 사용자가 로그인하지 않은 경우 어디에서 New, Update 등의 액세스를 중지합니까?

(모델에서) 로그인하지 않은 사람들이 게시물을 만들거나 편집하지 못하도록하고 싶습니다. & ./posts/new보기를 게시물 목록으로 리디렉션하고 싶습니다. "새 게시물을 작성할 수 없습니다. 로그인하지 않았습니다. "라는 메시지가 표시됩니다.

def new 

    if !session[:user] 
     redirect_to(@posts, :notice => 'You cannot create a post unless you are logged in.') 
     return 
    end 

    @post = Post.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @post } 
    end 
    end 

을하지만 작동하지 않습니다

그래서 같은 게시물 컨트롤러에서 "새로운"명령을 변경 시도했습니다.

내가 컨트롤러, 뷰 또는 모델에서 수행하고 싶은 로직을 넣어야할지 모르겠다. (또는 모두 3의 일부 조합).

나는 단지 한 곳 (건조기 등)에 넣어야한다고 생각하지만, 나는 어디 있는지 모른다.

+0

이것은 루비에 관한 질문이 아닙니다. 레일에 관한 것이므로 질문 제목을 변경할 수 있습니까? – David

답변

2

before_filter :verify_authenticated을 사용해보세요. API 문서를 확인하십시오 : http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html. 두 번째 예제는 정확히 당신이 찾고있는 것입니다. 인증 검사는 ApplicationController에 들어갈 수 있으므로 한 곳에서 확인할 수 있습니다.

또는 가이드에서 "예뻐"노트를 체크 아웃 : http://guides.rubyonrails.org/action_controller_overview.html#after-filters-and-around-filters

+0

모델이 모델을 중지시키지 못하게합니까? 사람들이 모델에 인증을 추가하는 것에 대해 걱정하지 않습니까? – seanyboy

+0

모델에 도착조차하지 않습니다. before_filter는 작업 전에 실행됩니다. '@post = Post.new' 코드 라인에 도달하지도 않을 것입니다. –

1

사용자 인증은 일반적으로 컨트롤러에서 처리를 더 구체적으로 필터 전에를 사용하여. 예를 들면 다음과 같습니다.

class SomeController 
    before_filter :authorize 

    # the rest of your controller 

    private 
    def authorize 
    # authorization code 
    end 
end 

이제 인증 코드는 사용중인 gem/plugin에 달려 있습니다 (또는 사용자 시스템을 구현 한 경우).

1

:이 단계에있는 곳

나는 확실하지 않다 [면책 조항은 귀하의 질문에서 당신은 레일 지식의 어떤 수준에서 명확하지 않았다]. 난 레일이 상자 밖에서 인증을 지원해야한다고 가정합니다. 그렇지 않습니다. 이것을 위해 많은 플러그인이 존재합니다. devise을 살펴 보시기 바랍니다.

당신이 필요로하는 모든 것을 할 수 있으며, 자신의 인증을 롤 할 필요가 없습니다. 하지만 직접하고 싶다면 introduction을보세요. 아주 오래되었지만 대부분은 여전히 ​​유효합니다.

그러나 나는 확실히, 현명하고 입증 된 기존 플러그인 (예 : others은 분명히 존재)과 함께 갈 것을 권고합니다.

관련 문제