c# - 如何在 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 数据库中)和租户(生活在应用程序数据库中)之间的多对多关系。
我在考虑几种可能性:
- 向每个用户添加一个或多个声明,指定对租户的访问权限。所以基本上每个用户都会有一个类型的声明
tenant
,其值是租户的 ID。
因此,当我需要在 API 中获取用户可以访问的所有租户时,我只需IEnumerable<Claim> tenants = User.FindAll("tenant")
.
这感觉“脏”,因为文档说:
声明是一个名称值对,它表示主题是什么,而不是主题可以做什么。
- 另一种选择是在应用程序数据库中有一个用户表,其中每条记录都引用 ASP.NET Identity Core 用户的 ID。从该表中,在应用程序数据库中创建一个正常的多对多关系。
这使事情更容易管理,但我需要在 IdentityServer 数据库中的用户和 app 数据库中的用户之间强制执行 1-1 映射。
你能想出更好的方法来解决这个问题吗?如果不是,你会选择选项 1 还是 2?
解决方案
推荐阅读
- javascript - 谷歌地图 v3 不是 LatLngBounds 或 LatLngBoundsLiteral:不是对象名称:“InvalidValueError”
- git - 在 Git 中,如何最好地恢复到标记,进行进一步更改,然后恢复所有后续更改?
- flutter - Flutter:使用 Navigator pushNamed 将参数称为对象
- apache-kafka - kafka + 此服务器不是该主题分区的领导者 + kafka 生产者
- javascript - Google Recaptcha - 如何更改默认的必需验证消息?
- nginx - 删除部分 url 使用 nginx
- c# - 用户控件不动态添加控件
- python - 如何在正则表达式中使用变量来计算平均值
- sass - 从 SCSS 列表生成类列表
- postgresql - 在为 mac 安装 postgrsql 应用程序后安装 pgadmin