我正在开始一个新的ASP.Net MVC 3应用程序,我希望能够使用内置的成员资格提供程序。
我遇到的问题是我的应用程序可供各种组织使用,所显示的信息仅适用于用户所在的组织,这一点非常重要。
毫不夸张的做法是坚持所有用户都使用他们的电子邮件地址作为用户名,这样每个人都是独一无二的,并且可以与他们各自的组织建立联系。问题是,一些用户没有电子邮件地址,因此没有可靠的方法来确保唯一的名称,我不希望人们知道不同组织已经使用的用户名。 (USernames应该只对本组织而言是唯一的,而不是整个应用程序)
理想情况下,我希望用户在一个字段中输入他们的组织名称,然后在另一个字段中输入他们的用户名(然后输入密码!)
所以我们可以让Jane从一个组织登录.....
Organization Company1
Username Jane
Password ********
然后其他人也称Jane可以从其他组织登录..
Organization Company2
Username Jane
Password ********
所以我的问题是,修改成员资格系统以允许这个额外字段的最佳方法是什么?
答案 0 :(得分:4)
我要编写自定义MembershipProvider来满足要求。
答案 1 :(得分:2)
内置(默认ASP.NET)成员资格提供程序不提供Organization / Company / Firm或Department的概念。您将在数据库中为那些具有aspnet_users
表的外键的人创建自己的表,以便能够存储其他信息(我不会更改默认的aspnet_users表,因为它可能会使其与之不兼容当前的默认提供者或未来的提供者)。然后,您需要使用默认提供程序来创建默认功能,并创建一个Service类来支持扩展功能。我知道,我已经做到了。它变得复杂和肮脏,需要时间,但它完全可行。
最有可能的是,您最终会创建自己的提供商,并且首先要求支持公司用户。如果您认为更改默认提供程序以支持不必要的。公司内部唯一性的要求是您必须实施的另一项要求。
答案 2 :(得分:2)
成员资格使用的提供者模式经过专门设计,您可以对其进行扩展。您可以从默认提供程序继承,也可以从默认成员资格使用类继承,以添加所需的字段。这使您无需从头开始编写提供程序。正如@mare指出的那样,虽然存在潜在的陷阱。
我可以通过提示组织,用户名和用户的登录表单来克服这些问题。密码,但在幕后结合组织和&用户名和&将其用作内部用户名。
答案 3 :(得分:0)
我认为会员资格中有内置选项。查看表my_aspnet_users中的APPLICATION字段。 参考这里: http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx