【问题标题】:How back-end works with an Angular web app multi user后端如何与 Angular Web 应用程序多用户一起工作
【发布时间】:2016-07-08 15:04:25
【问题描述】:

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

【问题讨论】:

    标签: angularjs database rest web-applications jwt


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      您创建一个数据库表“事件”,为每个用户创建一个?还是包含所有用户的所有事件的大“事件”表?

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        相关资源
        最近更新 更多