那麼基本上你如何處理權限?GraphQL授權/許可
比方說,我們有某種後(S)列表,以及一個參數第一限制的職位的數量。只有擁有者和已批准的用戶才能閱讀帖子,而其他人則不能。什麼是實施這個最好的方法?
query {
{
viewer {
posts(first: 10) {
id
text
}
}
}
}
我目前想的是什麼,是有一定道理的單一來源,以用戶是否可以閱讀後與否,並與dataloader
模塊把它掛。
但是,如何查詢恰好10個帖子?如果我查詢我的數據庫正好有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,這就是我想要避免的。
也許我以某種方式解決了問題,因爲業務邏輯位於另一層而不是數據庫之上,因此無法查詢所有行。任何幫助讚賞。
有很多方法可以處理用GraphQL進行的身份驗證和權限,它基本上取決於您決定是否採用適當的方法:)只是想指出另外兩個可能有用的資源。 1.在2017年阿波羅天舉行的非常棒的演講https://www.youtube.com/watch?v=xaorvBjCE7A 2.我們如何在graphcool實施權限:https://www.graph.cool/blog/2017 -04-25-graphql的許可查詢,oolooch8oh / – nburk