业务逻辑层 - 获取当前用户

本文关键字:用户 获取 业务 | 更新日期: 2023-09-27 18:35:08

我有一个业务逻辑层和2个使用它的应用程序,一个MVC UI和一个Web API项目。

我的类上的一个属性是 CreatedBy 和 UpdateBy,它应该保存 userid。

    public Nullable<System.DateTime> CreatedTS { get; set; }
    public string CreatedBy { get; set; }
    public Nullable<System.DateTime> UpdatedTS { get; set; }
    public string UpdatedBy { get; set; }

鉴于 BLL 有多个使用者,捕获用户 ID 的最佳方法是什么?

A) - 使用 Environment.UserName 在 BLL 中设置此项?

B) - 要求客户端设置它并使用模型数据注释来使其成为必需

C) - 要求客户端将其传递到 BLL 中的任何创建或更新方法中。

业务逻辑层 - 获取当前用户

我通常会使用Thread.CurrentPrincipal.Identity.Name

为此,必须确保将Thread.CurrentPrincipal设置为代表当前用户的主体。 这是在 UI 层中完成的,如果出现以下情况,则会自动执行此操作:

  • 在 ASP.NET 应用程序中使用 RoleProvider。

  • 通过设置 principalPermissionMode ="UseAspNetRoles" 在 WCF 应用程序中使用RoleProvider

  • 在客户端应用程序中调用AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

如果在 MVC 和 WebAPI 中使用 FormsAuthentication,则可以访问属性User.Identity.Name

int userId = db.Users.Single(r=>r.Name == User.Identity.Name);

在WebApi中,它将HttpContext.Current.User.Identity.Name

这种方法非常安全。如果将userId存储在客户端,用户将能够对其进行修改。