gpt4 book ai didi

asp.net-mvc - 如何使用 MVC Controller.User 属性引用我自己的表?

转载 作者:行者123 更新时间:2023-12-04 06:40:50 25 4
gpt4 key购买 nike

使用 MVC 2 项目的默认成员资格提供程序,我可以引用 User.Identity.UserName根据它默认创建的任何内容。我不想这样做——想使用我自己的表。所以,我实现了 System.Web.Security.MembershipProvider 类。根据网络和 SO 上的许多帖子,我唯一实现的是 ValidateUser(string username, string password)
我可以很容易地看到它接受用户名和密码字符串,我访问我的数据库上下文(LINQ to Entities,实际上是 MySQL 的 dotConnect 提供程序),并检查用户名和密码——足够简单。

但是,如何让 Controller.User 对象使用我自己的表的属性。例如,我的表叫做 Staff。它有 StaffID (PK)、FirstName、LastName 等。如何访问当前上下文用户的 StaffID,如下所示?

int id = User.StaffID;

我找到了 Matt Wrock 的这篇文章,但我真的无法理解实现 User 类,特别是 IsInRole 方法。这个对象是什么时候构造的,构造函数参数从哪里来?

最佳答案

我不喜欢成员(member)资格提供者,所以我尽量避免不惜一切代价处理它。如果您不想使用 User从 Controller ,您可以执行以下操作。

创建一个基本 Controller 并让您的所有 Controller 都继承它。

在您的基本 Controller 中,添加一个名为 CurrentUser 的属性。您要使用的任何类型(可能是 Linq 2 Sql 类型)。

覆盖 Initialize基本 Controller 上的方法并运行逻辑以在用户通过身份验证时获取正确的用户。套装CurrentUser给适当的用户。现在,您可以在继承自基本 Controller 的任何 Controller 中访问该属性。

public BaseController : Controller
{
public MyUserEntity CurrentUser {get; set;}

protected override void Initialize(RequestContext requestContext)
{
CurrentUser = null;
if (requestContext.HttpContext.User.Identity.IsAuthenticated)
{
var userRepository = new UserRepository();
CurrentUser = userRepository.GetUser(requestContext.HttpContext.User.Identity.Name);
}

}

}

并使用它:
public StaffController : BaseController
{
public ActionResult View()
{
var staffRepository = new StaffRepository();
var staff = staffRepository(CurrentUser.StaffID);
return View(staff);
}
}

关于asp.net-mvc - 如何使用 MVC Controller.User 属性引用我自己的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260697/

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