2010-11-18 2 views
1

데이터베이스로 Postgresql을 사용하고 멀티 테넌트 애플리케이션의 내 미들웨어로 레일 3을 사용하고 있습니다.Intercept ActiveRecord establish_connection 초기화 프로세스

establish_connection 메소드를 통해 생성 된 모든 연결에 대해 현재 로그인 한 클라이언트 ID를 포함하는 환경 변수를 설정하고 싶습니다.

어쨌든이 환경 변수를 설정하기 위해 establish_connection의 콜백을 통해 초기화 프로세스를 가로채는 수 있습니까?

+0

정말 달성하고자하는 것을 설명해 주시겠습니까? 한 응용 프로그램이 여러 데이터베이스에 연결되면 env 변수에서 무엇을 설정 하시겠습니까? 그리고 왜 env 변수를 설정 하시겠습니까 ??? –

+0

죄송합니다, 어떻게 든 내 사서함에 귀하의 의견을받지 못했습니다. 네, 환경 변수를 설정하는 것은 나쁜 습관이라고 생각했습니다. 기본적으로 데이터 프라이버시를 보장하기 위해 모든 고객 계정에 대해 포스트그레스 스키마를 구축하고 있습니다. 그러나 이것은 현재 사용자의 client_id를 기반으로 모든 ActiveRecord 연결에 대해 schema_search_path를 변경해야 함을 의미합니다. 일반적으로 모델에서 세션 정보를 사용하고 싶지는 않지만이 경우 연결이 설정 될 때마다이 정보를 사용해야합니다. 이 작업을 수행 할 수있는 명확한 방법이 있습니까? –

답변

1

저는 앱 레벨에서 authority_level 필드와 같은 데이터를 분리하는 경향이 있습니다. 그런 다음 "verify_permission (current_user)"메소드를 before_filter로 실행할 수 있습니다.

일반적으로 권한 상승 문제가 발생할 경우 관리자에게 경고를 보내기 위해 자동으로 강제로 로그 아웃하고 관리자 경고를 전자 메일로 보내는 "kick_user_out"방법이 있습니다. 당신은 그것들을 충분히 얻었고 계정도 잠겼습니다.

+0

답변 해 주셔서 감사합니다. 나는 아직도 db 수준에서 클라이언트 데이터를 분리하는 것이 더 편하다고 느낍니다. 클라이언트 수준에서 유지하는 것은 내 쿼리 각각에 client_id 필터가 있어야 함을 의미합니다. 모든 불량 쿼리는 잠재적으로 보안을 위태롭게 할 수 있습니다. 권한 수준 문제와 같은 불량 쿼리에 대해 더 걱정합니다. –