加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在哪里进行审计或记录?

发布时间:2020-12-16 06:41:42 所属栏目:asp.Net 来源:网络整理
导读:我目前正在使用NHibernate处理ASP.NET MVC项目,我需要跟踪某些实体的更改,以便能够对数据进行一些报告和查询.出于这个原因,我希望将数据放在表中,但我正在尝试决定在哪里“挂钩”审计代码. 在NHibernate层: PRO:功能强大的事件系统,可跟踪任何变化 PRO:应
我目前正在使用NHibernate处理ASP.NET MVC项目,我需要跟踪某些实体的更改,以便能够对数据进行一些报告和查询.出于这个原因,我希望将数据放在表中,但我正在尝试决定在哪里“挂钩”审计代码.

在NHibernate层:

> PRO:功能强大的事件系统,可跟踪任何变化
> PRO:应用程序中没有任何内容可以更改,恕不另行通知(除非有人使用原始SQL …)
> CON:因为我有一个通用的存储库……然后我必须过滤掉有用的实体(我不需要跟踪所有内容).
> CON:我无法轻松访问控制器和操作,因此我只能跟踪基本操作(更新,删除…).我至少可以获得HttpContext来获取一些信息.

在控制器级别的操作筛选器上:

> PRO:有关请求和Web应用程序状态的完整信息.通过这种方式,我可以将“编辑”与“状态更改”区分开来,并在审计信息中更具描述性.
> CON:有人可以忘记过滤器,可以采取一个重要的操作,恕不另行通知,这是一个很大的问题.

任何线索?

更新:了解如何Create an Audit Log using NHibernate Events.

解决方法

我认为在存储库级别执行此操作更合适.主要是因为您将来可能决定添加一些访问您的存储库的方法,该方法不通过MVC(例如,数据的WCF接口).

所以问题就变成了,你如何解决你在NHibernate层上所做的关于它的问题?

过滤掉有用的实体很简单.我可能会通过实体类型的自定义属性来执行此操作.您可以标记要跟踪的实体或不标记的实体;哪个更容易.

弄清楚控制器的真正意图是什么.我要争辩说你可以“获取HttpContext”;我不认为在存储库中执行此操作是个好主意,因为关注点分离.存储库不应该依赖于Web.一种方法是在存储库上创建自定义方法,以便您以不同方式跟踪操作;如果这些编辑的其他方面表现不同,例如不同的安全性,这尤其具有吸引力.另一种方法是通过比较对象的旧版本和新版本来检查更改,并导出更改的实际性质.第三种方法是不尝试导出更改的性质,而只是将前后版本存储在日志中,以便读取日志的人可以自己解决.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读