2016-03-21 47 views
0

我是一名Angular程序員,我正在接近後端世界。我很想知道,粗略地說,通過JWT管理多個用戶應用程序的後端如何工作。當我必須從角度來檢索數據庫中的東西時非常簡單,因爲它足以使服務在其中輸入rest-api的url ......但是當您擁有多個用戶時,後端會發生什麼情況? 比方說,我有一個帶有認證的Web應用程序,帶有Date的TODO列表。我想象在數據庫中將成爲所有用戶的列表。但是,如果用戶使用表單添加事件和日期,它將如何工作?您爲每個用戶創建一個數據庫表「events」?還是一個包含所有用戶的所有事件的大型「事件」表?後端如何與Angular web應用程序多用戶合作

回答

0

你的問題並不是與Angular有關,甚至不是關於後端服務,所以我會忽略那部分。所以你在問關於設計多租戶數據存儲。

您爲每個用戶創建一個數據庫表'events'?還是一個包含所有用戶的所有事件的大型「事件」表?

這裏沒有對錯之分。這一切都取決於你的需求。一般來說,這是簡單和隔離之間的折衷。如果您談論關係數據庫(我從您的表述中獲得),那麼您可以爲每個租戶分別創建一個數據庫,或者爲每個租戶分配一個單獨的模式,或者爲具有索引列的單個表創建一個單獨的數據庫。你甚至可以爲每個租戶做一個單獨的服務器。所有都是可行的選擇。單獨的數據庫選項是最孤立的,但更難編程。單表比較容易,但數據存儲是共享的。我可以說,我曾與客戶合作設計這類解決方案,並且大多數時候他們爲每個用戶選擇一個單獨的數據庫。

我推薦閱讀this討論SQL中的多租戶數據的文章 服務器(但也適用於其他關係數據庫)。它已經10歲了,但仍然非常相關。

當然這個決定也會受到你的數據存儲的影響。如果您不使用RDBMS,那麼您將擁有不同的概念和功能來組織數據,例如:集合,角色,文件夾,容器等。另外 - 某些數據存儲具有內置工具來處理這些需求。在示例中 - Azure SQL DB具有一個稱爲Row Level Security的功能,可以更輕鬆地管理帶租戶標識列的單個表。它還有一個名爲Elastic DB PoolElastic DB Tools的概念,用於管理每個租戶單獨數據庫的情況。 我相信其他產品\技術具有可比較的功能,但這些僅僅是一些示例,可以幫助我闡明這一點。

1

在您描述的場景中,通常會有一個「事件」表,其中包含所有用戶的事件。但是,該表還將包含一個包含創建該事件的用戶的ID的列。

在顯示已登錄用戶的事件時,首先要驗證JWT令牌是否有效(請注意,如果即使此驗證發生在客戶端,也必須發生在服務器端,因爲安全原因)。如果令牌有效,您將從令牌聲明中檢索用戶ID。然後,您將在數據庫查詢中使用此ID,以便僅檢索屬於登錄用戶的事件。

相關問題