我们将使用MVC 4构建应用程序。关键要求是视图级别的审计。换句话说,我们必须能够显示访问视图/屏幕的人员(例如个人详细信息),创建视图的参数以及何时访问视图。这是一个新的应用程序,所以我们几乎可以做任何需要解决这个需求。如何设计MVC应用程序,并考虑视图审计?
数据库将是SQL Server 2008.数据访问将包括EF 4.x,可能5.x但不是确定的事情。
我的问题,我该如何开始设计这个功能?那里有任何示例应用程序吗?
我们将使用MVC 4构建应用程序。关键要求是视图级别的审计。换句话说,我们必须能够显示访问视图/屏幕的人员(例如个人详细信息),创建视图的参数以及何时访问视图。这是一个新的应用程序,所以我们几乎可以做任何需要解决这个需求。如何设计MVC应用程序,并考虑视图审计?
数据库将是SQL Server 2008.数据访问将包括EF 4.x,可能5.x但不是确定的事情。
我的问题,我该如何开始设计这个功能?那里有任何示例应用程序吗?
在视图级别不介意审计。我认为审计行动更好。您可以使用全局操作筛选器(例如here)执行此操作。
EF对Views不能很好地工作。您可能更擅长使用手持代码的直接ADO.NET持久层,或者Linq2Sql更适合使用视图(尽管如此,您仍然需要手动将它们连接起来)。 nHibernate可能是最好的ORM使用。
编辑:
@ user1469655 - 你的MVC是如何工作的一个非常基本的误解。 “视图”不是一个页面。这是一个模板。您可能认为它的“页面”(即访问特定的url)实际上是两种不同事物的组合,即路线和行为。一个动作可以导致一个特定的模板(视图)进行渲染,但动作和视图之间不一定有1:1的相关性。
“动作”是一种控制器的方法。这通过路线映射到URL。通常(但不一定),这意味着这样的事情:
http://www.my.site/controller/action
当用户访问该URL,它会导致被称为操作方法,并有可能为一个视图中呈现。不同的动作可以呈现相同的视图,因为这不过是一个可以通过任何操作方法随意呈现的html模板。
所以你想要做什么取决于你实际记录什么。记录访问视图是没有任何意义的,因为这实际上并不意味着什么。你想要做的是通过操作登录访问,或者甚至可以通过路由记录。
最简单的方法是使用在每个操作之前调用的全局操作过滤器,在该过滤器中可以记录所需的信息(用户ID,日期,时间,操作,引用,等等)。它会被调用来执行每一个动作。但是,它不会被忽略的路由(例如用于像javascript,图像,css,直接下载的文件等内容)。如果您需要记录这些信息,则需要通过操作来控制对它们的访问。
有行动上的一个很好的教程器过滤器在这里
________Log4net – 2012-07-19 19:31:09
@jrummell - 我们处于设计模式,不确定如何开始。我在概念证明上实施了行和现场级审计。 – user1469655 2012-07-19 19:32:59
你指的是什么样的视图? MVC视图,SQL视图或其他类型的视图? – jrummell 2012-07-19 19:46:56