后端如何与 Angular Web 应用程序多用户一起工作
Posted
技术标签:
【中文标题】后端如何与 Angular Web 应用程序多用户一起工作【英文标题】:How back-end works with an Angular web app multi user 【发布时间】:2016-07-08 15:04:25 【问题描述】:我是一名 Angular 程序员,我正在接近后端世界。我很想知道,通过 JWT 管理具有多个用户的应用程序的后端是如何工作的。当我必须使用 angular 从数据库中检索某些内容时非常简单,因为它足以创建一个服务,在其中我输入 rest-api 的 url ......但是当你有很多用户时后端会发生什么? 假设我有一个带有身份验证的 Web 应用程序,一个带有日期的 TODO 列表。我想在数据库中将是一个包含所有用户的列表。但是,如果用户添加表单、事件和日期,它是如何工作的?您创建一个数据库表“事件”,每个用户一个?还是一个包含所有用户所有事件的大“事件”表?
【问题讨论】:
【参考方案1】:在您描述的场景中,您通常会有一个“事件”表,其中包含所有用户的事件。但是,该表还会有一列包含创建该事件的用户的 ID。
在显示登录用户的事件时,您首先要验证 JWT 令牌是否有效(请注意,即使此验证发生在客户端,也必须发生在服务器端,以确保安全原因)。如果令牌有效,您将从令牌声明中检索用户 ID。然后,您将在数据库查询中使用此 ID,以便您只检索属于登录用户的事件。
【讨论】:
【参考方案2】:您的问题与 Angular 无关,甚至与后端服务无关,所以我将忽略这部分。所以你问的是设计多租户数据存储。
您创建一个数据库表“事件”,为每个用户创建一个?还是包含所有用户的所有事件的大“事件”表?
这里没有对错。这一切都取决于您的需求。通常,这是简单性和隔离性之间的权衡。如果您谈论关系数据库(我从您的措辞中得到),那么您可以为每个租户拥有一个单独的数据库,或者为每个租户拥有一个单独的架构,或者一个带有索引列的单个表。你甚至可以为每个租户做一个单独的服务器。都是可行的选择。单独的 DB 选项是最孤立的,但更难编程。单表更容易,但数据存储是共享的。我可以说,我曾与客户一起设计此类解决方案,并且大多数时候他们为每个用户选择一个单独的数据库。
我建议阅读this 讨论 SQL 中的多租户数据的文章 服务器(但也适用于其他关系数据库)。它已有 10 年历史,但仍然非常重要。
当然,您的数据存储也会影响此决定。如果您不使用 RDBMS,那么您将有不同的概念和功能来组织数据,例如:集合、角色、文件夹、容器等。 此外 - 一些数据存储有内置工具来处理这些要求。例如 - Azure SQL DB 有一个名为 Row Level Security 的功能,它可以更轻松地管理具有租户标识列的单个表。它还有一个名为Elastic DB Pool 和Elastic DB Tools 的概念,用于管理每个租户的单独数据库方案。 我确信其他产品\技术具有类似的功能,但这些只是帮助我说明问题的示例。
【讨论】:
以上是关于后端如何与 Angular Web 应用程序多用户一起工作的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Web 套接字和 Angular CLI 设置代理
Angular/Ionic/Phonegap 应用程序与 Rails API Web 服务 Auth