【问题标题】:How to integrate access control with my ORM in a .net windows form application?如何在 .net windows 窗体应用程序中将访问控制与我的 ORM 集成?
【发布时间】:2011-01-23 12:34:27
【问题描述】:

我正在开发一个通用的数据库查询工具,一个 .Net 3.5 Windows 窗体应用程序。为了使表示层独立于数据库层。我使用了一个 ORM 框架,来自 DevExpress 的 XPO。

但是,我没有内置访问控制功能。我上网,我发现在 WCF 数据服务中,有一个有趣的概念,Interceptor,它遵循 AOP(Aspect Oriented Programming)。

我想知道谁有这样的经验在 ORM 中构建访问控制。我的基本要求是:

  1. 它应该是一个通用方法,由用户在运行时控制。所以任何硬编码都是不可接受的。
  2. 它可以基于属性、数据库表,甚至是外部程序集。

我愿意购买现成的解决方案。根据 AOP 的思想,访问控制功能可以很容易地与现有功能集成,而以前的开发人员几乎不知道;)

欢迎提出任何建议。

【问题讨论】:

  • 您对这种与其他 ORM 集成的解决方案感兴趣吗?
  • 我不介意。请继续告诉我更多信息。

标签: c# database orm access-control


【解决方案1】:

我不确定这个答案是否会对您的情况有所帮助,但对您来说可能会很有趣。

X-tensive 公司(DataObjects.Net ORM 的开发者)计划在几个月内为 DataObjects.Net 实现类似的功能。 X-tensive 的计划是提供功能齐全的即用型安全扩展,可能基于属性和方面。当然它会和这个 ORM 紧密相连,但是你可以从它的描述中得到一些想法。请参阅功能请求及其讨论here

你也可以看看Rhino Security,我不知道这个项目的当前状态,但它似乎对你的情况很有用。

【讨论】:

    【解决方案2】:

    为什么不在 ORM 和表示层之间建立一层呢?通过这种分离,您可以轻松地切换数据源(将来您可能将数据放在另一台服务器上并通过 Web 服务访问它)。我确信这一层有一个花哨的名称,但我将所有接口都称为管理器。

    Presentation -> Managers -> 数据访问层 -> DB

    例子:

    var user = Program.Components.Get<IUserManager>().GetById(1);
    user.FirstName = "Jonas";
    Program.Components.Get<IUserManager>().Save(user);
    

    在管理器中,您可以使用 IIdentityIPrincipal(.Net 中内置的访问控制接口)来控制访问。 http://msdn.microsoft.com/en-us/library/ms172765(VS.80).aspx

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2011-02-21
      相关资源
      最近更新 更多