ASP.NET拆分成员资格并使用存储库模式

时间:2010-02-15 14:28:57

标签: asp.net asp.net-membership repository-pattern

我正在使用asp.net mvc,DI,IoC,TDD构建一个应用程序作为一个学习练习。

对于我的数据访问,我使用的是存储库模式。现在我正在研究成员资格以及如何使用存储库模式。我目前正在使用Linq to Sql存储库,但不希望绑定到SQL Server以获取成员身份。

其次,我希望将会员资格分成若干服务:

  • AuthenticationService - 识别用户
  • AuthorizationService - 他们可以做什么
  • PersonalizationService - 个人资料

个性化服务将是我的应用程序中真正定义“客户”的内容,每个客户将拥有一个与AuthenticationService绑定的唯一ID /用户名 - 因此,允许我使用默认的ASP.NET成员资格提供程序,roll我自己或使用像Open ID这样的东西。

这是一个好方法吗?我不想重新发明轮子,但我希望我的应用程序的这些重要部分遵循与其余部分相同的模式。

由于 本

2 个答案:

答案 0 :(得分:1)

看一下RIA Authentication, Roles, and Profiles service ...无需重新发明轮子。

答案 1 :(得分:0)

说实话,实现我想要的是一个非常简单的过程。我还没有实现AuthorizationService,但这将采用类似的模式。

我的身份验证服务非常简单:

public interface IAuthenticationService
{
    bool IsValidLogin(string username, string password);
}

会有一个CreateUser方法,但我还没有实现它。

使用标准成员资格提供程序创建身份验证服务是一项简单的任务:

public class AspNetAuthenticationService : IAuthenticationService
{
    public bool IsValidLogin(string username, string password)
    {
        return Membership.ValidateUser(username, password);
    }
}

如果我想用自己的默认SqlMembershipProvider换出,那么我只需要更改web.config。为了支持不同类型的身份验证(可能形成auth和open id),我可以为每个身份验证创建一个控制器操作,并在设置auth cookie之前调用相应的IAuthenticationService.ValidateUser实现。

用于识别“用户”的验证过程。为了获得“客户”,我使用的是PersonalizationService。这个界面非常简单:

public interface IPersonalizationService {
    Customer GetCustomer(string username);
}

这会返回我的客户(包括地址,过去的订单 - 我们真正关心的东西)。如果传入的用户名不存在,则GetCustomer方法将创建一个客户对象。因此,如果使用标准表格auth,则在注册期间无论如何都将创建客户。如果使用类似OpenID的东西,他们第一次登录客户对象将被创建并链接到他们的OpenID用户名(因此将经过身份验证的“用户”与“客户”分开的原因。

此过程也适用于匿名结账,因为我可以为“访客”客户创建内存客户对象,如果他们进行购买,最终会将其保留到数据库中。在这种情况下,我没有用户(因为他们没有进行身份验证),但我确实有一个客户。

我很满意这个实现。我想我会推出自己的会员提供商(因为它并不是那么困难),我想使用存储库模式进行数据访问。有兴趣听取有关此方法的任何意见/建议。

我使用过的一些资源:

http://noahblu.wordpress.com/2009/02/19/custom-membershipprovider-using-repository-dependency-injection-pattern-magic/

http://davidhayden.com/blog/dave/archive/2007/10/11/CreateCustomMembershipProviderASPNETWebsiteSecurity.aspx

http://pbdj.sys-con.com/node/837990/mobile

http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx