【问题标题】:How do I architecture and implement custom membership provider?如何构建和实现自定义会员提供程序?
【发布时间】:2011-08-30 18:02:00
【问题描述】:

我正在尝试学习 ASP.NET MVC。在阅读了 Web 上的许多文章之后,我整理了一个粗略的示例应用程序,该应用程序使用自定义成员资格提供程序针对现有 SQL 数据库进行身份验证。

我的模型类库项目的结构如下所示。

  • Sigma.Models
    • 实现
      • FormsAuthenticationService.cs
      • MembershipService.cs
    • 接口
      • IFormsAuthenticationService.cs
      • IMembershipRepository.cs
      • IMembershipService.cs
    • 提供者
      • SigmaMembersipProvider.cs
    • 存储库
      • SqlMembershipRepository.cs
    • MembershipModel.cs

我的问题如下:

  • 我是否必须创建另一个类库项目(如 Sigma.DataAccess)来分别保存提供程序和存储库?这是做 MVC 解决方案架构的可接受方式吗?这只是我正在研究的概念证明,实际项目可能会变得非常庞大。我想确保我一开始不会做任何愚蠢的事情。

  • IMembershipRepository 和 IMembershipService 包含大部分相同的功能,只是 IMembershipRepository 使用自定义开发的 MembershipModel 对象返回数据;而 IMembershipService 是标准 ASP.NET MembershipProvider 的接口,并返回 MembershipUser 和 MembershipCollection。我应该让接口 IMembershipRepository 从 IMembershipService 继承吗?

  • 我希望模型项目可重用,这样我就可以将它用于任何其他 UI 应用程序,例如 WebForms 或 WinForms。这可能与项目的结构方式有关吗?

  • 另外,我不想使用 ASP.NET 开箱即用的成员资格提供程序,因为我需要一个可以针对现有数据库工作的解决方案。我假设这意味着我必须自定义 ASP.NET 成员资格提供程序中可用的功能,以针对我的自定义数据库工作。如果我的假设不正确,请纠正我。

提前致谢。

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-membership projects-and-solutions membership-provider


    【解决方案1】:

    我是否必须创建另一个类库项目(如 Sigma.DataAccess)来分别保存提供程序和存储库?这是做 MVC 解决方案架构的可接受方式吗?这只是我正在研究的概念证明,实际项目可能会变得非常庞大。我想确保我一开始就不会做任何愚蠢的事情。

    是的 - 将它们分开,以防您的实施更改影响较小。

    IMembershipRepository 和 IMembershipService 包含大部分相同的功能,除了 IMembershipRepository 使用自定义开发的 MembershipModel 对象返回数据;而 IMembershipService 是标准 ASP.NET MembershipProvider 的接口,并返回 MembershipUser 和 MembershipCollection。我应该让接口 IMembershipRepository 继承自 IMembershipService 吗?

    实际上在提供的示例中-实际上在实现上似乎没有区别-这两种方法都是 bool ValidateUser() 绝对是重复的,但是因为它们每个都有可能“潜在”改变的最终用途,所以它们被抽象为两个独立的接口,所以我不会让一个继承另一个。

    我希望模型项目可重用,这样我就可以将它用于任何其他 UI 应用程序,如 WebForms 或 WinForms。这可能与项目的结构方式有关吗?

    是的 - 但我会只保留该项目中的模型。任何不是模型的东西 - 都不应该在那个项目中。

    另外,我不想使用 ASP.NET 开箱即用的成员资格提供程序,因为我需要一个可以针对现有数据库工作的解决方案。我认为这意味着我必须自定义 ASP.NET 成员资格提供程序中可用的功能,以针对我的自定义数据库工作。如果我的假设不正确,请纠正我。

    这是正确的 - 您需要一个自定义 SQL 成员资格提供程序

    【讨论】:

    • 我知道这有点离题了,但是这个自定义成员资格提供程序的废话正是我放弃 ASP.NET MVC 并使用 MVC 框架选择 PHP 的原因。自定义会员提供者不必要地过于复杂(而且文档很糟糕)。不仅如此,似乎每个使用现有数据库或不想使用庞大的 ASP.NET 默认值的人都必须经历这整个血腥的努力,才能在他们的应用程序中提供身份验证。对我来说似乎很疯狂!
    • Mike 放弃一个伟大的框架是一个愚蠢的理由。有很多代码示例可以做到这一点......更不用说如果你真的想要你自己的身份验证没有会员提供者你可以在大约十行代码中完成所有事情,以支持登录和添加角色。我想我会在我的网站上放一个很好的 MVC 示例,因为我刚刚开始 www.secure-coding.com。我同意它可能会更好,但它真的不是太难。
    • 有些人拆分了他们的界面......有些人没有,每个人都有自己的原因。如果这个项目要变大,我会考虑按目的拆分项目。人们也可能会争辩说与安全相关的接口虽然适合安全类(成员资格)项目,但它确实是你的电话,但作为一般规则,尽量将接口排除在包含具体类实现的库之外,因为它会产生依赖关系注入清洁器和单元测试清洁器。
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多