gpt4 book ai didi

c# - 我可以使用声明数据将 CreatedBy 用户数据插入到自定义表中吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:52 25 4
gpt4 key购买 nike

我有轻微的架构问题。我有 IdentityServer 解决方案,使用身份用户存储(数据库中的用户)对用户进行身份验证。我这里有登录功能和注册功能,所以这里要用到DbContext。我有另一个解决方案 API,我在其中保存不是身份表的自定义表。所有表都在同一个数据库中。

现在,当我通过 API 添加新记录时,我想以某种方式将 CreadetBy 与身份用户连接起来。我知道我可以从声明中获取有关用户的信息,然后在创建新行时插入,但这是好的做法吗?

另一个问题是,我是否应该将注册操作移出 IdentityServer 项目,并且只对存储在那里的身份用户使用登录功能并将注册放到 API,这样我就不会在两个地方复制 ApplicationUser 的附加字段?

最佳答案

据我了解,您应该保持关注点分离。您永远不应该在不共享相同上下文的表之间建立关系。这意味着 Cars 永远无法链接到 AspNetUsers。

它是关于对象和字段的含义。例如,IdentityUser 和 CustomUser 看似相等,其实不然。 IdentityUser 具有识别用户所需的所有信息,而 CustomUser 具有自定义模型所需的所有信息。事实上,您可以拥有没有登录帐户的自定义用户。

还要考虑电子邮件地址。在这两种情况下都有这个字段似乎是多余的,但实际上我可以使用我的 Google 帐户登录,同时我想在我的自定义电子邮件地址上接收更新。

那么 CreatedBy 字段的含义是什么,您将如何使用它?如果它是自定义上下文的一部分(如报告),那么您应该有一个 CustomUser 表并与该表关联。如果您只是为了管理目的而检查它,那么存储用户名可能就足够了。您要按该字段查询吗?您是否需要其他信息,例如 CustomUserAddress?

如果做得好,我认为您实际上没有多余的字段。因为它们都有不同的目的/意义。

无论如何,您都不想超出上下文范围。而且您不希望最终发送 ID 列表以从另一个上下文中检索信息。

问题是你想链接当前用户。身份 token 用于识别用户。这对您的资源没有任何意义。但是访问 token 包含有关资源中实际用户的信息。

通过将授权保持在资源附近,您可以使用 CustomUserId 扩展授权用户。将此信息添加到访问 token ,因为它是授权的一部分。它告诉资源用户只能访问指定用户的数据。

使用 [access token].customUserId 可以匹配 CustomUser。因此 CreatedBy 应该具有 CustomUser.Id 的值。

我还要推荐这篇文章:https://leastprivilege.com/2016/12/16/identity-vs-permissions/

关于c# - 我可以使用声明数据将 CreatedBy 用户数据插入到自定义表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44096327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com