【问题标题】:ASP.NET Membership and Roles separation relationshipASP.NET Membership 和 Roles 分离关系
【发布时间】:2011-03-01 19:56:04
【问题描述】:

我有一个 ASP.NET 项目,我想将成员资格(SQL 提供程序)保留在单独的数据库中,并且角色/配置文件将针对每个应用程序。

问题

Membership 数据库和 Roles/Profile 数据库之间关联的 KEY 是什么?是用户 ID 还是用户名?

我在单独的 expolrer 中打开了表,发现 Membership 数据库中的 UserID 与应用程序 Roles 数据库中的不同。

【问题讨论】:

    标签: asp.net asp.net-membership entity-relationship


    【解决方案1】:

    如果我正确阅读了您的问题,您希望将成员资格存储在一个数据库实例中,并将角色存储在另一个数据库实例中。

    通过简单地提供不同的连接字符串,这是可以接受和可能的。您没有需要实现自定义提供程序。

    了解角色和成员资格是真正独立的问题,除了由 MembershipProvider.DeleteUser 方法造成的轻微出血,并且可以独立运行。

    角色和成员资格表之间没有真正的“关系”,任何由 aspnet_users 表中的记录外观推断的都是巧合。如果在为用户进行角色查询时存在记录,则使用该 userId,否则将创建具有新 userId 的新记录。

    在整个提供程序堆栈中使用的通用值是username 字段,虽然对于应用程序来说是唯一的,但它不是键。

    所以,只要您知道在调用 Membership.DeleteUser 时必须手动执行角色记录的删除,您就可以简单地使用两个数据库,不需要自定义实现。

    祝你好运

    【讨论】:

      【解决方案2】:

      在这种情况下,您可以做的最好的事情是实现您自己的(自定义)MemberShip 和 Role 提供程序。成员和角色之间的关系由您自己定义,并且通常使用用户名。

      评论诗人的回应:

      也许我不应该提到“最佳解决方案”,但在我看来,默认的 AspNet 成员资格和角色提供程序伴随着使用 aspnet -regsql 命令创建的 Aspnet 表。如果 Microsoft 的成员资格和角色提供者不能满足您的需求,您应该创建自己的。 如果您创建自己的成员资格和角色提供者,其他开发人员将清楚他们正在处理的提供者实现工作或以不同的方式构建。

      我的结论是,我的解决方案可能不是“最佳解决方案”,而更像是一个建议。另一件事是 ASP.NET 提供程序无论如何都不是好的软件设计的例子。我们仍在使用它,因为它们与其他控件兼容。你的解决方案没问题,但我的也可以,这取决于先生。 Saif 选择最适合他的应用的解决方案。

      正如微软所说:

      创建自定义成员资格提供程序有两个主要原因。

      •您需要将成员身份信息存储在 .NET Framework 中包含的成员资格提供程序不支持的数据源中,例如 FoxPro 数据库、Oracle 数据库或其他数据源。

      •您需要使用

      管理会员信息

      数据库架构不同于 使用的数据库模式 .NET 附带的提供程序 框架

      【讨论】:

      • 我认为实现自定义提供程序既不是必需的,也不是最佳解决方案。
      • 您能否解释一下“ASP.NET 提供程序不是优秀软件设计的示例”这一说法?
      • 当我的应用程序需要一个自定义的 MembershipProvider 实现,它只需要对用户进行身份验证和重定向,它迫使我从基类中实现大约 30 种方法,其中 90% 我永远不会使用。那是糟糕的设计!
      猜你喜欢
      • 2010-10-12
      • 2011-08-26
      • 1970-01-01
      • 2017-04-21
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      相关资源
      最近更新 更多