【问题标题】:Pass user identity from UI to data layer将用户身份从 UI 传递到数据层
【发布时间】:2011-09-06 04:23:10
【问题描述】:

为了对 SQL 2008 数据库执行更新/插入/删除审核,我正在访问

HttpContext.Current.User

在数据层中传递给存储过程,该过程将为审计触发器设置 CONTEXT_INFO。

这些可能是错误的,因为如果我想放置另一个 UI(即 WinForms),HttpContext 将不适用,但是我不想在我的 BLL 方法中添加用户名参数或添加构造函数,因为所有这些方法都是静止的。在 DAL 中访问用户身份的最佳方式是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    您应该使用静态Thread.CurrentPrincipal 属性。但请注意,此属性可能不等于 HttpContext.Current.User,具体取决于您的 Web 应用程序的模拟设置。

    一个好的解决方案可能是首先检查HttpContext.Current 是否不为空。如果不是,则从那里读取用户,否则回退到读取Thread.CurrentPrincipal

    【讨论】:

    • 谢谢,这也适用于 WCF 吗?
    • 是的。 Thread.CurrentPrincipal 实际上可以由应用程序/框架的任何部分设置(如果授予了必要的权限)。 WCF 应该相应地设置它,但它可能会被覆盖。对于 WCF,您可能还想看看ServiceSecurityContext.PrimaryIdentity
    • 我不同意在你的 DAL 层中有依赖 System.Web.Mvc dll,因此你只能选择 Thread.CurrentPrincipal。但是,如果设置了应用程序池标识,那么从 UI 模拟用户到 DAL 的最佳方式是什么?
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多