기본적으로 어떻게 사용 권한을 처리합니까? GraphQL 승인/허가
은의 우리가 게시물의 양을 제한하는 인수 첫으로, 어떤 종류의 포스트 (들)의 목록이 있다고 가정 해 봅시다. 소유자와 승인 된 사용자 만 게시물을 읽을 수 있지만 다른 모든 사람들은 게시물을 읽을 수 없습니다. 이것을 구현하는 가장 좋은 방법은 무엇입니까? 내가 현재 생각하고 무엇query {
{
viewer {
posts(first: 10) {
id
text
}
}
}
}
는 사용자가 게시 여부를 읽을 수 있는지 여부에 단일 정보 소스를 가지고 있고, dataloader
모듈로를 연결하는 것입니다.
하지만 정확하게 10 개의 게시물을 어떻게 쿼리합니까? 내 DB에 정확히 10 개의 행을 쿼리하면 나중에 비즈니스 논리로 필터링하여 예를 들어 8 개의 게시물을 반환 할 수 있습니다.
해결 방법은 limit
을 쿼리에 넣지 않는 것이지만 그다지 효율적이지는 않습니다. 그래서 이것에 관해 좋은 방법은 무엇입니까? 여기서
영감
(1) https://dev-blog.apollodata.com/auth-in-graphql-part-2-c6441bcc4302
(2) https://dev-blog.apollodata.com/graphql-at-facebook-by-dan-schafer-38d65ef075af
(1) 질의로서
export const DB = {
Lists: {
all: (user_id) => {
return sql.raw("SELECT id FROM lists WHERE owner_id is NULL or owner_id = %s, user_id);
}
}
}
하여이를 해결하고 행 어떤 행을 읽을 수 있는지 필터링하십시오 :
resolve: (root, _, ctx) => {
// factor out data fetching
return DB.Lists.all(ctx.user_id)
.then(lists => {
// enforce auth on each node
return lists.map(auth.List.enforce_read_perm(ctx.user_id));
});
}
따라서 첫 번째 인수가 1 인 경우에도 모든 행을 쿼리한다는 것을 분명히 알 수 있습니다. 이는 피하려고하는 것입니다.
어쩌면 비즈니스 로직이 DB보다 다른 계층에 있기 때문에 어떤 방식 으로든 문제가 해결되고있을 수 있습니다. 따라서 모든 행을 쿼리하는 것은 불가능합니다. 어떤 도움을 주셔서 감사합니다.
GraphQL을 사용하여 인증 및 권한을 처리하는 방법에는 여러 가지가 있습니다. 기본적으로 적절한 접근 방식을 결정할 때까지만 사용할 수 있습니다. 단지 도움이 될만한 리소스가 두 개 더 있음을 나타냅니다. 1. 2017 년 apollo에서 주어진 대단한 이야기 https://www.youtube.com/watch?v=xaorvBjCE7A 2. 그래프 쿨 (graphcool)에서 사용 권한을 구현하는 방법 : https://www.graph.cool/blog/2017 -04-25-graphql-permission-queries-oolooch8oh / – nburk