2012-01-14 2 views
1

멀티 테넌트 (multi tenant) 인 레일 앱이 있습니다. 계정, 클라이언트 및 트랜잭션을위한 리소스가 있습니다. 계정에는 많은 거래가 많은 고객이 있습니다. 실수로 Client.find, Transaction.find 등을 수행 할 수 없도록하고 싶습니다 (모든 것이 the_account.clients.find 또는 client.transactions.find 등을 통과해야합니다). 계정을 처음 선택하는 것을 잊어서 잘못된 계정에서 잘못된 사용자를 실수로 표시하지 않도록이 작업을 수행하려고합니다.레일에서 중첩 된 자원을 선택하는 것을 어떻게 금지합니까?

Client.find (Client.find_by_name, Client.find_by_etc)를 비활성화하는 방법이 있지만 여전히 the_account.clients.find를 허용 하시겠습니까?

답변

0

Client.find를 완전히 사용 불가능하게 설정하는 것에 대해 잘 모릅니다. 그러나 클라이언트 및 트랜잭션 컨트롤러 각각의 맨 아래에 조회를 처리 할 수있는 메소드를 넣을 수 있습니다. 나는 일반적으로, 나는 collection을 대신 대체 것 Client.find를 사용하는 거라고 내 컨트롤러 도처에서, 그리고

def collection 
    if current_user.admin? 
    Client.all 
    else 
    current_user.account.clients 
    end 
end 

다음은 클라이언트 코드의 모습거야. 과다 노출 위험없이 모든 적절한 기록을 가져옵니다.

+0

감사합니다. 불행히도 아직 찾기보다는 컬렉션을 호출해야하므로 지금보다 나을 것이별로 없습니다. – NotDan

관련 문제