首页 > 解决方案 > 如何在 ASP.NET Identity Core 用户和自定义外部表之间建立多对多关系?

问题描述

我有一个在 ASP.NET Identity Core 之上运行 IdentityServer4 的 ASP.NET Core 2.1 项目,如此处所述。该项目有自己独立的 SQL Server 数据库来存储 ASP.NET Identity Core 表。

然后我有一堆其他项目,包括受 IdentityServer 保护的 ASP.NET Core 2.1 API。这些项目与另一个包含所有 Web 应用程序特定数据的 SQL Server 数据库通信。

我想表达用户(生活在 IdentityServer 数据库中)和租户(生活在应用程序数据库中)之间的多对多关系。

我在考虑几种可能性:

  1. 向每个用户添加一个或多个声明,指定对租户的访问权限。所以基本上每个用户都会有一个类型的声明tenant,其值是租户的 ID。
    因此,当我需要在 API 中获取用户可以访问的所有租户时,我只需IEnumerable<Claim> tenants = User.FindAll("tenant").
    这感觉“脏”,因为文档说:

声明是一个名称值对,它表示主题是什么,而不是主题可以做什么。

  1. 另一种选择是在应用程序数据库中有一个用户表,其中每条记录都引用 ASP.NET Identity Core 用户的 ID。从该表中,在应用程序数据库中创建一个正常的多对多关系。
    这使事情更容易管理,但我需要在 IdentityServer 数据库中的用户和 app 数据库中的用户之间强制执行 1-1 映射。

你能想出更好的方法来解决这个问题吗?如果不是,你会选择选项 1 还是 2?

标签: c#asp.net-coremany-to-manyidentityserver4asp.net-core-identity

解决方案


推荐阅读