1

在我的应用程序中,我需要注册用户。用户可以是以下三种中的任何一种:admin、client 和 general。他们有不同的属性(管理员可能只有名字,客户可能有公司地址等等)。默认的MVC会员计划是可以的,但如何扩展它以在注册期间注册更多信息?或者我应该使用自定义会员资格?

我需要使用clientID或记录客户和一般用户generalID

4

3 回答 3

1

默认的 MVC 成员资格方案是可以的,但如何扩展它以在注册期间注册更多信息?或者我应该使用自定义会员资格?

我认为太多人,包括你自己,都期望从默认的 ASP.NET Membership Provider 中获得太多。它从未被设计用于处理特定于应用程序的事情,例如您的客户所在的公司、您的管理员姓名等。它的主要目的是存储用于身份验证的密码。

当然,密码需要与用户名相关联,这样才能有一个 2 密钥身份验证对。有时您还需要用户的电子邮件地址,当它与用户名不同时,以便就密码与用户联系。但是不要在会员商店中存储有关您的用户的任何其他信息。将其存储在您的应用程序数据库中。

为了在您的应用程序和成员资格提供者之间连接数据,请使用成员资格提供者的 UserName 或 ProviderKey 作为您的一个数据库表中的列。您最终得到 2 个没有明确相关的实体。您甚至可以在与应用程序数据库不同的数据库中实现 SqlMembershipProvider。即使它们在同一个数据库中,也要避免在任何提供程序表和您的应用程序表之间使用外键。这混淆了您拥有的东西和您“外包”给会员提供商的东西。

您最终会得到 2 个物理隔离的用户表示。一个是 MembershipProvider,它包含您的用户的密码。另一个是您的应用程序,其中包含其他特定于业务的详细信息。两者仅在您的应用程序中逻辑关联。在您使用会员 API 对用户进行身份验证后,他们的 UserName 和/pr ProviderKey 对您的应用程序可用。然后,您可以使用该数据来查询您的应用程序数据库并获取其他详细信息。这是您可以放置​​类似clientIDgeneralID您提到的内容的地方。

如果您查看 System.Web.Security.Member* API,这应该会让事情变得更清楚。它确实做得很好——将您的用户与密码和其他与密码重置相关的信息(如电子邮件地址、问题和答案等)相关联。因此,只需外包密码提供程序,并依靠您的应用程序来完成重要的工作。

于 2012-07-08T19:21:45.970 回答
0

您可以自定义默认配置文件提供程序或创建自己的...按照此参考 http://msdn.microsoft.com/en-us/library/8zs47k7y

您也可以为 web.config 中的任何内容添加新属性到配置文件

于 2012-07-08T12:43:06.713 回答
0

我强烈建议创建自己的会员角色。它非常简单,没有什么能比拥有自己的实现更灵活。

这是我不久前制作的一个视频,逐步向您展示如何实现这一目标:

http://www.youtube.com/watch?v=BsxUsyMSGeA

它的要点是,您创建自己的 AuthorizeAttribute 并创建自己的角色;在此过程中保护每个控制器甚至单个 Action 方法。

这种方法的一个缺点是您可以确定用户在您的系统中具有什么角色,但不能确定角色在您的系统中可以做什么。那有意义吗?

如果您需要编辑角色在运行时可以执行的操作,还有其他选择。

于 2012-07-08T15:46:32.117 回答