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

LINQ审核和web应用程序的当前用户

  •  1
  • tvanfosson  · 技术社区  · 16 年前

    问题:

    填充派生数据上下文的当前用户属性的最佳方法是什么?我是否应该创建一个实用程序类,该类被注入AuditUtility,检查CurrentUser是否已设置,如果未设置,则填充它。为了进行测试,我会模拟这种情况,但在实时应用程序中,它可能会使用延迟加载,并在会话中获取/设置它。或者我应该修改数据上下文工厂(由所有控制器使用)以执行此功能。我已经在单元测试期间使用了模拟工厂,这样就不需要创建新类了。或者应该在工厂之外进行派生,并且在上下文创建期间将当前用户注入。这将允许我“代表”进行审计。

    我意识到这有点主观,但我希望您能提供任何想法/经验。

    谢谢

    4 回复  |  直到 16 年前
        1
  •  1
  •   Corbin March    16 年前

    if(HttpContext.Current != null)
    {
        //grab the user from the HttpContext
    }
    else
    {
        //grab the user from the Thread
    }
    
        2
  •  1
  •   leppie    16 年前

    System.Threading.Thread.CurrentPrincipal 应该给你你想要的答案。

        3
  •  0
  •   Aaron Hoffman    16 年前

    DataContext的范围是什么(应用程序、会话、请求、每个BusinessObject..)?如果它不同,您可能根本不希望在DataContext中缓存当前用户(或在创建过程中进行设置)。我可能会在DataContext中使用一个属性,该属性在需要时(以某种方式)从会话检索当前用户。

        4
  •  0
  •   tvanfosson    16 年前

    我最终创建了一个CurrentUserUtilityBase类,该类有一个GetAuditUser方法,该方法接受当前数据上下文并检索与HttpContext.user.Identity中当前用户名对应的用户对象。它使用此对象提取当前用户的id和显示名称,并创建和返回包含这些属性的AuditUser对象。

    我的实现类使用工厂获取数据上下文的实例,并在此数据上下文上调用基类方法。my data context的工厂方法使用current user实用程序在创建上下文后将上下文的当前用户注入上下文。

    推荐文章