代码之家  ›  专栏  ›  技术社区  ›  Fraze

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

  •  0
  • Fraze  · 技术社区  · 6 年前

    List<CLPost> 包含“CreatedByUserId”。标识信息完全在另一个DBContext中,因此我无法为IdentityUser设置实体关系。返回CreatedByUser的全名的最佳方法是什么?谢谢!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ruard van Elburg    6 年前

    将身份与业务上下文分离实际上是一件好事。这样你就会有一个明确的分离的问题。

    你遇到的是 信息不是上下文的一部分 .

    混合这两个上下文对您没有帮助,查询这两个上下文也不是解决方案。那么解决这个问题最简单的方法是什么?

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

    同样的,确保你可以使用UserManager来访问用户商店。但是假设你不能,而且最肯定的是,这不是你想要的。只有一个应用程序应该负责标识。

    User.IsInRole 实际上是查看用户的角色声明,而不是AspNetUserRoles表。

    由于它是同一上下文的一部分,所以您只需使用一个查询就可以访问它。您可以添加一列以引用当前标识的subjectId sub

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

    请阅读我的回答,了解更多关于这一点的想法: Is claims based authorization appropriate for individual resources