【问题标题】:ASP.NET Membership - A design for tracking additional informationASP.NET Membership - 用于跟踪附加信息的设计
【发布时间】:2010-08-13 23:45:02
【问题描述】:

我正在为一个公共网站开发一个 ASP.NET4.0/C# 应用程序,该应用程序只需要对在相关企业工作的员工进行身份验证。这个想法是让网站拥有一个 CMS,这样员工就可以进入并更改某些内容,而无需使用任何 html。

我的问题与 ASP.NET 成员资格提供程序的设计和使用有关。我不想让网站与现有数据库一起工作,因此无需为此目的创建自己的 MembershipProvider。但是,由于每个用户都是员工,我想跟踪其他信息,例如姓名和办公室号码。我可以想到两种显而易见的方法来实现这一点:

  1. 使用默认的 SqlMembershipProvider 类。因此,我需要将适当的表添加到我的数据库中,并为我想要存储的任何“附加”信息创建一个单独的表。这有效地在用户表上创建了一个垂直分区,因为我也会使用 asp.net 分配的用户 ID 作为员工表的主键。要检索“附加”信息,我可以向提供者询问有关当前用户的信息,并在我想知道其他任何信息时重新查询数据库。

  2. 为所有员工信息(包括登录名和密码)创建一个表,并使用我想要的功能创建我自己的自定义 MembershipProvider 和 MembershipUser 类。

我也考虑过使用个人资料来存储此类信息,但是,该网站将公开包含员工列表,并且这些页面将需要访问其中的一些信息。因此,我可能应该缓存这些数据,似乎使用配置文件提供的序列化字段会导致问题。

因此,纯粹就设计而言...最好区分用户和员工并使用默认的 SqlMembershipProvider 和关联表,或者编写我自己的用户表来存储我需要的信息和我的拥有自己的 MembershipProvider 来访问该信息?

【问题讨论】:

  • 你不想用他们的AD进行身份验证、办公号码等吗?
  • 是的,如果我使用的是 Windows 身份验证。不过,他们的工作计算机不一定在同一个网络上,因此表单身份验证更有意义。

标签: asp.net database-design web-applications asp.net-membership


【解决方案1】:

如果我正确理解您的问题,您希望在 ASP.NET Membership 中存储其他用户信息。我使用以下设置创建了许多网站。

  1. 使用 aspnet_regsql.exe 工具安装默认的 .NET Membership
  2. 使用通过外键链接到 aspnet_Users 表的唯一标识符 (PK) UserID 列创建 UserProfile 表
  3. 要访问该信息,您只需要特定用户的 UserId,然后您可以查询您的自定义表以获取更多信息。

Microsoft 已写了一封 excellent post 说明如何执行此操作。

祝你好运!

M

【讨论】:

  • 谢谢,M。看起来普遍的共识是选项 1,并且该帖子在实施时是一个很好的参考。
【解决方案2】:

我正在做类似的事情,使用您的选项 1。非常适合我。

我的业务逻辑有一些改变用户的功能。它知道何时触摸我的用户表或会员功能。

为此类事情使用自定义 MembershipProvider 会给您带来比您预想的更多的工作。

【讨论】:

    【解决方案3】:

    SQL 表配置文件提供程序 (http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx) 将帮助您做到这一点。 您将获得配置文件的强大功能,同时不必担心缓存或序列化,因为此提供程序将配置文件信息存储在清晰的数据库表中而无需任何序列化。您可以直接在查询中使用它们。

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      相关资源
      最近更新 更多