后端如何与Angular Web应用程序多用户一起使用

时间:2016-03-21 21:52:36

标签: angularjs database rest web-applications jwt

我是Angular程序员,我正在接近后端世界。我很想知道,通过JWT管理多个用户的应用程序的后端如何工作。当我必须使用angular从数据库中检索某些内容非常简单,因为它足以创建一个Service,我在其中输入rest-api的url ...但是当你有很多用户时后端会发生什么? 假设我有一个带有身份验证的Web应用程序,一个带有Date的TODO列表。我想在DB中将是一个包含所有用户的列表。但是,如果用户添加表单,事件和日期,它是如何工作的?您创建了一个数据库表'事件',每个用户一个?还是一个包含所有用户所有事件的大“事件”表?

2 个答案:

答案 0 :(得分:1)

在您描述的方案中,您通常会有一个“事件”表,其中包含所有用户的事件。但是,该表还将包含一个列,其中包含创建该事件的用户的ID。

在显示已登录用户的事件时,您首先要验证JWT令牌是否有效(请注意,即使在客户端进行此验证,也必须在服务器端进行验证,以确保安全性原因)。如果令牌有效,您将从令牌声明中检索用户ID。然后,您可以在数据库查询中使用此ID,以便只检索属于登录用户的事件。

答案 1 :(得分:0)

您的问题与Angular无关,甚至与后端服务无关,因此我将忽略该部分。所以你要问的是设计多租户数据存储。

  

您为每个用户创建一个数据库表' events&#39 ;,一个?或者是一个大型活动'包含所有用户的所有事件的表?

这里没有对错。这一切都取决于您的需求。通常,它是简单性和隔离性之间的权衡。如果你谈论一个关系数据库(我从你的措辞中得到),那么你可以为每个租户提供一个单独的数据库,或者为每个租户提供一个单独的模式,或者为一个带有索引列的单个表。您甚至可以为每个租户执行单独的服务器。一切都是可行的选择。单独的DB选项是最孤立的,但更难编程。单个表更容易,但数据存储是共享的。我可以说我与客户合作设计了这类解决方案,而且大多数时候他们为每个用户选择一个单独的数据库。

我建议阅读讨论SQL中多租户数据的this文章 服务器(但也适用于其他关系数据库)。它已有10年历史,但仍然非常相关。

当然,您的数据存储也会影响此决定。如果您没有使用RDBMS,那么您将拥有不同的概念和功能来组织数据,例如:集合,角色,文件夹,容器等。 此外 - 一些数据存储构建了用于处理这些要求的工具。在示例中 - Azure SQL DB具有一个名为Row Level Security的功能,可以更轻松地管理具有租户标识列的单个表。它还有一个名为Elastic DB PoolElastic DB Tools的概念,用于管理每个租户单独数据库的方案。 我确信其他产品\技术具有相似的功能,但这些只是帮助我说明问题的例子。