2017-12-15 17 views
0

associateCurrentUser로 외부 호출에 대한 호출을 Feathers 서비스 메소드로 제한하려고합니다.외부에 대해 feathers 서비스 메소드를 사용자로 제한하지만 내부 호출에 대한 조회를 허용하십시오.

또한 서버가이 서비스 메서드를 제한하지 않고 호출 할 수 있도록하려고합니다.

사용 사례는이 서비스를 통해 클라이언트가 잠금 테이블을 사용하고 모든 클라이언트가 모든 잠금을 볼 수 있으며 때로는 서버가이 테이블에서 버려진 행을 지워야한다는 것입니다. 행 포기는 네트워크 오류 등에서 발생할 수 있습니다. 서버가 데이터를 제거하면 일반 깃털 제거 이벤트가 클라이언트에 방출되어야합니다.

나는 이것이 associateCurrentUser의 조합이어야하고 후크를 허용하지 않아야한다고 생각 하겠지만 어떻게 조립되는지는 알지 못하기 때문에 실험을 시작할 수 없다.

어떻게 구현하나요?

업데이트 : 내가 후크의 context.params.provider가 null의 경우, 통화가 다른 외부, 내부에 있음을 의미한다 다프에서이 대답 User's permissions in feathers.js API을 발견

. 이 모든 것이 정말로 필요한지 누구든지 확인할 수 있습니까?

내 자신의 테스트에서 나온 것처럼 보이지만 나와 줄을 물어볼 수있는 특별한 경우가 있는지 여부는 알 수 없습니다. 통화가 외부 경우

답변

1

params.provider이 사용되어 반송로 설정 될 것이다 (현재 어느 rest, socketio 또는 primushere, herehere 및 문서화).

서버에서 내부적으로 호출되는 경우에는 실제로 어떤 마법도 없습니다. 당신이 통과하는 것은 모두 params이 될 것입니다. 아무 것도 전달하지 않으면 undefined이됩니다. hook.params을 후크에 전달 (또는 병합)하면 원래 메소드가 호출 된 것과 동일하게됩니다.

// `params` is an empty object so `params.provider` will be `undefined` 
app.service('messages').find({}) 

// `params.provider` will be `server` 
app.service('messages').find({ provider: 'server' }) 

// `params.provider` will be whatever the original hook was called with 
function(hook) { 
    hook.app.service('otherservice').find(hook.params); 
} 
+0

정말 고마워요! 난 그냥 associatesCurrentUser + disallow 후크를 사용하는 대신 params.provider를 사용해야했습니다. 깃털에서 언제나처럼 아주 우아합니다. – Matty

+0

예, 미리 만들어진 많은 후크지만, 특히 오래된 인증 후크는 기존 코드의 작동 방식을 알아내는 것보다 몇 줄의 코드로 구현하는 것이 훨씬 쉽습니다 (또는 필요한 항목을 수행하는 것). – Daff