gpt4 book ai didi

c# - 如何在单独的程序集中获取用户 ID

转载 作者:行者123 更新时间:2023-11-30 17:00:33 25 4
gpt4 key购买 nike

我正在开发一个有两个项目的应用程序:

  1. 核心 - 使用存储库模式和领域驱动设计容纳数据访问层
  2. UI - 使用 ASP.Net MVC。目前,我可以通过 User 属性在 UI Controller 中获取当前登录用户的信息(id、名称等),如下所示:

    using Microsoft.AspNet.Identity;

    public class ExamController : Controller
    {
    IExaminationRepository _repository;

    public ExamController()
    {
    _repository = RepositoryFactory.Get<IExaminationRepository>();
    }

    [HttpPost]
    [Authorize(Roles = "Examiner")]
    public ActionResult Create(ExamViewModel viewModel)
    {
    try
    {
    ExaminationDomain domain = Mapper.Map<ExamViewModel, ExaminationDomain>(viewModel);

    //TODO: Move this to the repository
    domain.AuthorId = User.Identity.GetUserId();

    _repository.Add(domain);

    return RedirectToAction("Index");
    }
    catch
    {
    return View();
    }
    }
    }

我想将行:domain.AuthorId = User.Identity.GetUserId(); 移动到我的存储库具体实现中,如下所示:

using Microsoft.AspNet.Identity;
using System.Security.Principal;

internal class ExaminationRepository
{
public DBEntities context;
public IPrincipal User;

public ExaminationRepository(DBEntities context)
{
this.context = context;
//I'd like to instantiate User property here:
this.User = "not sure what to instantiate with";
}

public void Add(ExaminationDomain domain)
{
Examination newExam = Mapper.Map<ExaminationDomain, Examination>(domain);

newExam.AuthorId = User.Identity.GetUserId();

newExam.CreatedBy = User.Identity.Name;

newExam.CreatedDate = DateTime.Now;

context.Examinations.Add(newExam);

context.SaveChanges();

}

但我不确定在构造函数中将 User 属性实例化为什么。我读过一些使用 WindowsIdentity.GetCurrent().User 而不是创建用户属性的建议,但这不包含用户 ID,仅包含用户名。

关于获取用户信息还有其他建议吗?

我真的很感激在这方面的一些帮助..

谢谢,

最佳答案

我会使用自定义管理器将您的存储库与 httpcontext 分离。例如,我有一个名为 IAUthenticationManager 的接口(interface)

public interface IAUthenticationManager
{
string CurrentUserId();

bool HasCurrentUserRole(string roleName),
}

易于测试且完全解耦。

关于c# - 如何在单独的程序集中获取用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22090357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com