【问题标题】:Archiving ASP.Net users with MembershipProvider使用 MembershipProvider 归档 ASP.Net 用户
【发布时间】:2013-04-04 19:45:47
【问题描述】:

在使用 MembershipProvider 删除时存档 asp.net 用户是否有最佳做法?

基本上,我想要完成的是,当我使用 MembershipProvider.DeleteUser("someusername@some.com", true) 删除用户时,我希望能够存档其个人资料。

【问题讨论】:

  • 您对归档的定义是什么?例如,将已删除的用户移动到存档表或将IsDeleted 列添加到表中?
  • 存档意味着保留数据而不从数据库中物理删除它们。我的第一直觉是将数据保存到另一个表中。不,我拒绝将 IsDeleted 列添加到 my_aspnet_users 表中。我的第一直觉是“最佳实践”吗?

标签: asp.net asp.net-membership archive


【解决方案1】:

如果您只执行Membership.DeleteUser(username,true). 会发生什么您可能会收到一点提示,要求您在 Membership 上添加 using 指令。如果配置正确,则不需要创建新的 SimpleMembershipProvider 实例。

如果您像这样动态创建它,则需要在该对象上设置连接并以编程方式对其进行配置(它不知道您在上面创建的连接)。通常人们在 web.config 中执行此操作,但如果您使用表单身份验证模板创建应用程序,那么您应该自动处理。

【讨论】:

    【解决方案2】:

    由于(顾名思义)Membership 基于 Provider 模式,您可以轻松实现具有归档功能的 DeleteUser 方法。

    对于 SqlMembershipProvider,您可以轻松添加已删除位列并自定义 aspnet_Users_DeleteUser 存储过程以不真正删除用户,而只需设置此位。然后还要修改其他 sprocs 以进行选择等,使其保持一致。查看http://msdn.microsoft.com/en-us/library/aa478949.aspx 了解概览。

    【讨论】:

    • 我想提供我自己的 DeleteUser 方法实现;但是在数据库上,我感觉我不应该更改成员资格表。那么我该如何解决呢?
    • 您可以根据需要以任何方式更改它们。在我的一个项目中,我们做了很大的改变,一切都很顺利。当然,你需要知道它是如何工作的。正是出于这个原因,它是开放的。它的行为不符合您的要求?改变它。
    【解决方案3】:

    由于您使用的是旧版会员服务提供商,这里有两个解决方案 -

    简单的方法

    aspnet_Membership 表的 IsApproved 列标记为 false,这样用户将无法登录。

    如果您想这样做,您需要修改 aspnet_Users_DeleteUser 存储过程以更新 IsApproved 列而不是删除用户。

    艰难的路

    正如您所说,您不想将 IsDeleted 列添加到 aspnet_Users 表中,请创建一个新表来跟踪已删除的用户。

    这里还需要修改aspnet_Users_DeleteUser存储过程,将UserId插入到DeletedUsers表中,而不是删除用户。

    另外,您需要修改 aspnet_Membership_GetPasswordWithFormat 存储过程以进行登录验证。

    【讨论】:

    • 感谢您的宝贵时间和您的意见。由于我找不到“标准做法”,我通过以下方式实现: 1. 添加一个新表(例如,在单独的数据库中将其称为存档表)。无论如何,我都不想修改由 AspNetMembershipProvider 创建的数据库。 2. 重写 MembershipProvider 的 Delete 方法。在新表中存档已删除的记录。就是这样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多