如何在.net windows窗体应用程序中将访问控制与我的ORM集成?

时间:2010-03-04 04:02:19

标签: c# database orm access-control

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

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

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

  1. 它应该是一种通用方法,并由用户在运行时控制。所以任何硬编码都是不可接受的。
  2. 它可以基于属性,数据库表,甚至是外部程序集。
  3. 我愿意买一个现成的解决方案。根据AOP的思想,访问控制功能可以轻松地与现有功能集成,并且几乎不会故意与之前的开发人员集成;)

    欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

我不确定这个答案会对你的情况有所帮助,但它对你来说很有意思。

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

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

答案 1 :(得分:0)

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

演示文稿 - >经理 - >数据访问层 - > DB

示例:

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

在管理人员中,您可以使用 IIdentity IPrincipal (内置在.Net中的访问控制界面)来控制访问。 http://msdn.microsoft.com/en-us/library/ms172765(VS.80).aspx