유성

2014-04-04 6 views
0
나는 각 메시지 user_id를 통해 사용자를 참조하는 메시지의 목록을 보려면 간단한 채팅 응용 프로그램 및 유성 0.8.0

유성

을 실험하고

특정 선택 패턴에 Collection.find()을 제한하는 방법, I 메시지와 함께 사용자 이름을 표시하려고합니다.

find() 호출에 대한 선택 패턴을 제한 할 수 있습니까? Meteor.users.find({_id: msg.userId})은 허용되지만 Meteor.users.find({})은 허용되지 않습니까?

불행히도이 부분은 Collection.allow/.deny의 적용을받지 않습니다. 자연스러운 장소라고 생각합니다. 이것이 가능하다면 공격자가 클라이언트에서 전체 사용자 목록을 가져올 수 있다는 걱정없이 간단하게 Meteor.publish("usersWithName",function() {Meteor.users.find({},{fields:{username:1}});을 사용할 수 있습니다.

현재 메시지로 참조 된 사용자 만 게시하려면 smart-publish 패키지를 사용하고 있지만 더 간단한 솔루션을 선호합니다.

답변

1

아니요, 서버에 연결되지 않으므로 찾기 쿼리가 클라이언트 측에서 실행되는 것을 제한 할 수 없습니다. 그냥 로컬 컬렉션에 대해 쿼리를 실행합니다. 삽입, 업데이트 또는 삭제가 클라이언트 쪽에서 발생하고 서버에서 유효성 검사를받는 것과 동일한 방식으로 (즉, 누군가가 클라이언트에서 문서를 제거 할 수 있지만 서버는이를 거부합니다.)

이 문제를 해결하는 가장 좋은 방법은 특별히 필요한 문서 만 게시하는 것입니다. 언급 한 바와 같이 클라이언트가 보유해야하는 문서 만 게시하는 경우 보안이 유지됩니다. 검색 클라이언트 쪽에서 제한을 가하는 방법이 있더라도 필요 이상으로 많은 모음을 전달하는 것은 아직 의미가 없습니다.

+0

좋습니다. 추측 하건데, Meteor에서 실제로 빠져있는 것은 뷰를 정의하는 간단한 방법입니다. 게시/구독은 괜찮지 만 충분히 강력하지는 않습니다. – robbit