2012-07-19 65 views
0

我们将使用MVC 4构建应用程序。关键要求是视图级别的审计。换句话说,我们必须能够显示访问视图/屏幕的人员(例如个人详细信息),创建视图的参数以及何时访问视图。这是一个新的应用程序,所以我们几乎可以做任何需要解决这个需求。如何设计MVC应用程序,并考虑视图审计?

数据库将是SQL Server 2008.数据访问将包括EF 4.x,可能5.x但不是确定的事情。

我的问题,我该如何开始设计这个功能?那里有任何示例应用程序吗?

+0

________Log4net – 2012-07-19 19:31:09

+0

@jrummell - 我们处于设计模式,不确定如何开始。我在概念证明上实施了行和现场级审计。 – user1469655 2012-07-19 19:32:59

+0

你指的是什么样的视图? MVC视图,SQL视图或其他类型的视图? – jrummell 2012-07-19 19:46:56

回答

1

在视图级别不介意审计。我认为审计行动更好。您可以使用全局操作筛选器(例如here)执行此操作。

0

EF对Views不能很好地工作。您可能更擅长使用手持代码的直接ADO.NET持久层,或者Linq2Sql更适合使用视图(尽管如此,您仍然需要手动将它们连接起来)。 nHibernate可能是最好的ORM使用。

编辑:

@ user1469655 - 你的MVC是如何工作的一个非常基本的误解。 “视图”不是一个页面。这是一个模板。您可能认为它的“页面”(即访问特定的url)实际上是两种不同事物的组合,即路线和行为。一个动作可以导致一个特定的模板(视图)进行渲染,但动作和视图之间不一定有1:1的相关性。

“动作”是一种控制器的方法。这通过路线映射到URL。通常(但不一定),这意味着这样的事情:

http://www.my.site/controller/action 

当用户访问该URL,它会导致被称为操作方法,并有可能为一个视图中呈现。不同的动作可以呈现相同的视图,因为这不过是一个可以通过任何操作方法随意呈现的html模板。

所以你想要做什么取决于你实际记录什么。记录访问视图是没有任何意义的,因为这实际上并不意味着什么。你想要做的是通过操作登录访问,或者甚至可以通过路由记录。

最简单的方法是使用在每个操作之前调用的全局操作过滤器,在该过滤器中可以记录所需的信息(用户ID,日期,时间,操作,引用,等等)。它会被调用来执行每一个动作。但是,它不会被忽略的路由(例如用于像javascript,图像,css,直接下载的文件等内容)。如果您需要记录这些信息,则需要通过操作来控制对它们的访问。

有行动上的一个很好的教程器过滤器在这里

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

+0

请解释EF如何与ASP.NET MVC无法正常工作。 – Maess 2012-07-19 19:30:32

+1

@Maess--这不是我说的。我说英孚和意见不一样。EF假定视图中的任何非空字段都是主键,这在大多数情况下非常不方便。 – 2012-07-19 19:32:36

+0

EF没有这样的事情。在EF中,唯一被认为是PK的属性是Id或[entityname] Id。如果您使用另一个命名约定的PK,则必须配置EF来处理它。 – Maess 2012-07-19 19:34:41