ASP.NET MVC3 /用户注册,成员资格,角色和权限

时间:2012-07-08 12:36:42

标签: asp.net-mvc-3 ef-code-first

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

我需要记录clientIDgeneralID的客户和一般用户。

3 个答案:

答案 0 :(得分:1)

  

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

我认为包括您自己在内的太多人希望从默认的ASP.NET成员资格提供程序中获得太多。它从未被设计用于处理特定于应用程序的事物,例如您的客户所在的公司,管理员的名称等等。它的主要用途是存储密码以进行身份​​验证。

当然,密码需要链接到用户名,以便可以有一个双密钥身份验证对。有时,您还需要用户的电子邮件地址,当它与用户名不同时,才能与用户联系以了解他们的密码。 但请勿在会员商店中存储有关您用户的任何其他内容。 将其存储在您的应用程序数据库中。

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

您最终会有两个物理上孤立的用户表示形式。一个是MembershipProvider,它包含用户的密码。另一个是您的应用程序,其中包含其他特定于业务的详细信息。这两者仅在您的应用程序中逻辑关联。使用成员资格API对用户进行身份验证后,其UserName和/ pr ProviderKey将可供您的应用程序使用。然后,您可以使用该数据来查询应用程序数据库并获取其他详细信息。您可以在这里放置您提到的clientIDgeneralID之类的内容。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我强烈建议您创建自己的会员角色。这很简单,没有什么可以超越自己实现的灵活性。

这是我之前做过的视频,一步一步地向您展示如何实现这一目标:

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

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

此方法的一个缺点是,您可以确定用户在您的系统中具有哪些角色,但不能确定角色在您的系统中可以执行的操作。这有意义吗?

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