2017-05-05 101 views
0

我正在使用NodeJS,Express和MongoDB開發SaaS API。它實施了JWT認證/安全方法。在RESTful API中檢查用戶權限

在我個人的情況下,我有(現在)兩個集合:用戶和客戶端。

enter image description here

你可以看到,每個集合具有字段(用於定義的目的)。因此,在終端設計方面我使用的是真實地寧靜的方法,使:

  • /API /用戶/ {} userId的/客戶端:插入客戶,即

這正是我點讓我想要,在發佈新客戶之前檢查價格計劃是否允許用戶這樣做。在邏輯方面:

function post(req,res){ 
    // Check if the JWT user.id is the same of the endpoint request 
    if(req.user._id == req.params.id){ 
     // Here I want to know which is the price plan and to count the Clients that the user has 

    } 
} 

在我疑惑的方面,我還以爲在一些假設,但我真的不知道哪一個是最好的:

  • 做一個查詢的用戶集合中獲取價格計劃,做一個查詢計數的客戶集合驗證,然後發佈新的客戶端。
  • 將用戶的價格計劃信息放入JWT中,執行查詢計算用戶的客戶端集合驗證,然後發佈新客戶端。

這些是我想到的兩種主要可能的解決方案,但我嚴重懷疑安全性和性能方面的問題,我應該實施/遵循哪一個。

預先感謝您。

回答

1

我有同樣的懷疑。此外,如果您將任何東西放入標記中,那麼當信息發生變化時,您將不得不重新發布這些標記(必須進行用戶登錄和註銷)或實施複雜的標記更新邏輯。應用程序也在不斷髮展:今天你需要價格,明天還有其他的東西。可能每次更改所有用戶的令牌(實際上將其用作分配器存儲)並不是一個好主意。這就是爲什麼保持智威湯遜儘可能短的原因。

你的問題是更多的意見,但作爲我自己的意見,我肯定會存儲在jwt中只有userId(+元信息,如果需要)。但不是應用程序的具體事情從數據庫中讀取是要走的路。

+0

謝爾蓋還有一次,我非常重視你的意見,你總是在談論點。分析我的具體需求,對於這個工作流程,我需要3個查詢,你不覺得這有點花銷嗎?是的,目前我的困難並不是代碼明智的,但實際上架構和決策是明智的,很難單獨獲得這種知識。 – Ricardo

+0

我個人有一個規則,並強制它進入公司,任何API響應應在300毫秒內給出。這是最高限制,但當然你希望速度儘可能快。另一方面,我個人將優化分爲微觀優化和優化,這是合理的。在微觀優化方面,你花費了昂貴的時間,但結果並不值得花費時間。我曾經工作過的一個項目,使得大約400分貝的查詢渲染每一頁。仍然有效。在這種情況下,3個查詢不值得考慮。但是,在你的情況下,你決定。 –