最佳实践:Razor页面之间的共享代码



Razor Pages的新功能。我的IndexModel是一个绑定的List<CLPost>,其中包含"CreatedByUserId"。标识信息完全在另一个DBContext中,因此我无法设置与IdentityUser的实体关系。返回CreatedByUser全名的最佳方式是什么?谢谢

将Identity与业务上下文分离实际上是一件好事。这样,你就可以清楚地将担忧分开。

您遇到的问题信息不属于上下文

混合这两个上下文对你没有帮助,查询这两个语境也不是解决方案。那么,解决这个问题最简单的方法是什么确保信息成为上下文的一部分

在无法访问数据的情况下,您需要制作所需数据的本地副本。因此,如果您想在报告中显示用户名,则需要创建一个包含相关信息的用户本地副本。

听起来多余?事实并非如此。事实上,身份就是这样运作的。当您使用外部提供商(如Google(登录时,会在AspNetUsers表中创建用户的本地副本。冗余的不,因为您没有访问源的权限。

同样,请确保您可以使用UserManager让所有应用程序访问用户存储。但假设你做不到,当然,这不是你想要的。只有一个应用程序应该负责Identity。

请注意,索赔中提供了当前用户的信息。重要的是要认识到,例如User.IsInRole实际上是在查看用户的角色声明,而不是AspNetUserRoles表。

对于当前用户,请确保所有索赔都可用。当您需要来自其他用户的信息时,您需要将其存储在业务上下文中。您可以选择一些策略在用户登录时从声明中读取信息,也可以简单地添加维护用户信息的功能。

最重要的是,您需要在业务上下文中创建一个User表,该表包含报表所需的信息

由于它是同一上下文的一部分,您只需使用一个查询即可访问它。您可以添加一列来引用当前标识subjectId,即OpenIdConnect中的sub声明。为了将其与当前用户相匹配。

然后,您可以基于此子添加授权,而不需要上下文和用户表之间的实际关系。

还请阅读我在这里的回答,了解更多关于这一点的想法:基于索赔的授权是否适合个人资源

相关内容

  • 没有找到相关文章

最新更新