6

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

但是,我没有内置访问控制功能。我上网,我发现在WCF数据服务中,有一个有趣的概念,拦截器,它遵循AOP(面向方面​​编程)。

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

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

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

欢迎任何建议。

4

2 回答 2

1

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

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

你也可以看看Rhino Security,我不知道这个项目的当前状态,但它接缝这样的解决方案对你的情况很有用。

于 2010-03-05T11:18:09.047 回答
0

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

演示 -> 管理器 -> 数据访问层 -> 数据库

例子:

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

于 2010-05-06T17:26:05.367 回答