2012-06-24 2 views
1

내 사용자가 로그인하고 특정 회사와 연결된 앱이 있습니다. 사용자가 회사의 데이터 만 볼 수 있도록 모든 모델에 기본 범위를 추가하고 싶습니다. 그래서 내 Location 모델에서 나는 시도 :default_scope 호출에서 세션 변수를 사용하려면 어떻게해야합니까?

default_scope where(:company_id => session[:company_id])

을 오히려 내 응용 프로그램을 통해이 넘쳐보다. 내 생각은 기본적으로 Location 쿼리가 항상 현재 사용자 company_id로 제한되도록 보안을 설정하는 것입니다. 다른 모든 모델은 어떻게 든 Location에 다시 연결되므로이 작업을 수행해야하는 유일한 장소 여야합니다.

나는 약간의 파고가 있었다. 나는 이것을하는 것이 나쁜 생각이라고 생각했다. (실제로 어떻게할지는 모르겠지만).

실제로 이렇게 할 수 있습니까? 이 문제를 해결할 더 좋은 방법이 있습니까? 다음

class ApplicationController < ActionController::Base 

    helper_method :my_model 

    def my_model 
    Model.where(:company_id => session[:company_id]) 
    end 

    ... 
end 

그리고 당신의 구체적인 행동 내에서 사용 :

@models = my_model.where("created_at > ?", 2.weeks.ago) 

helper_method 당신이 방법을 사용할 수 있는지 확인합니다

+0

필자도 똑같은 시도를 해왔다. 또는 모든 쿼리에 세션 변수를 포함하거나 적용하는 것을 잊지 않았습니까? 모티츠 솔루션은 깨끗해 보입니다. 귀하가 생각한 해결책에 관심이 있으십니까? –

답변

2

내 접근 방식은와 ApplicationController 내 개인 방법을 가지고하는 것입니다 내면에서 도우미로. 이게 당신에게 일반적인 생각을 해주기를 바랍니다.

관련 문제