2012-12-29 2 views
1

나는 Workers와 Admins의 두 종류의 사용자가 있습니다. 저는 근로자 테이블과 관리자 테이블을 가지고 있습니다. 응용 프로그램 페이지에 입장하기 전에 사용자가 로그인하도록하고 싶습니다. ,라고 나는 함수를 쓴, 지금사용자를 페이지로 리디렉션하고 다른 사용자를 다른 페이지로 리디렉션

`before_filter :authenticate_user!` 

: 사용자가 근로자 테이블에서 발견되어 있는지 확인 is_worker을 그래서 내와 ApplicationController אם 다음 줄을 추가했다. 그렇다면 그를 근로자의 페이지로 리디렉션하십시오. 사용자가 없으면 관리자 페이지로 리디렉션하십시오.

관리자가 관리자 페이지를 입력 할 수 없기 때문에 관리자가 작업자 페이지를 입력 할 수 없기를 바랍니다.

그래서 내가 추가해야한다고 생각합니다 : before_filter :is_worker to : workerscontrolleradminscontroller.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :authenticate_user! 

    def is_worker 
    @email = current_user.email 
    tag = Worker.where(:email => @email) 
    if tag.nil? 
     redirect_to '/admins' 
    else 
     redirect_to '/workers' 
    end 
    end 
end 

만약 내가 잘못 나 수정하시기 바랍니다.

+0

사용자 및 근로자/관리자는 어떻게 관련이 있습니까? 'User' 클래스 (테이블)와 두개의'Worker' /'Admin' 클래스/테이블을 가지고 있습니까? 아니면 '유형'또는 '역할'을 가진 하나의 클래스입니까? 만약 devise를 사용한다면, 별도의 테이블에 있다면'authenticate_worker'와'authenticate_admin'을 할 수 있습니다. – nathanvda

+0

@nathanvda, 저는 'devise'를 사용하고 있습니다. 나는 노동자 테이블에 서명하는 각 사용자를 삽입한다. 나는이 테이블에 내 이메일을 추가 한 관리자 목록을 가지고있다. 나는 노동자를 (노동자 테이블에서 관리자 테이블로 이동시킴으로써) 매니저로 만들 수 있습니다. 하지만, 내가 할 수있는 말 : "authenticate_admin",하지만 관리자로 사용자를 정의해야합니다. 사용자를 관리자로 정의하려면 어떻게해야합니까? 그리고 사용자를 작업자로 정의하는 방법 (authenticate_admin 및 authenticate_worker 사용) –

답변

3

매우 효율적이지 않습니다. 당신이 STI를 사용하는 가정이 같은 is_worker? 방법을 만들 :

def is_worker? 
    current_user.type == 'Worker' 
end 

이 그런 다음 컨트롤러에서이 같은 방법을 추가 할 수 있습니다

def redirect_after_sign_in 
    if current_user.is_worker? 
    redirect_to '/admins' 
    else 
    redirect_to '/workers' 
    end 
end 

나는 그것을 개인 방법을 만들 것입니다. 그런 다음 사용자가 성공적으로 로그인하면이 메소드를 호출 할 수 있습니다.

작업자가 /admins URL로 이동하여 관리 데이터를 볼 수 없도록 컨트롤러 수준에서 애플리케이션을 보호하려고 할 때도 있습니다.

+0

감사합니다. 그러면 다음을 추가해야합니다. before_filter : is_worker ApplicationController에? –

+2

사실 나는 이것이 무엇을 제안한다고 생각하는지 알지 못합니다. 지금 편집 중입니다. –

관련 문제