پیاده سازی Audit Trail با استفاده از ActionFilters
پنجشنبه 13 آبان 1395در این مقاله میخواهیم چگونگی پیاده سازی Audit Trail را در ASP.NET MVC را توضیح دهیم و از ActionFilter های سفارشی شده استفاده کنیم که به شما اجازه می دهد آن ها را در Controller ها قرار دهید و Action هایی که مشخص کرده ایم جزئیات را log می کنند.
مشکل
یک کاربر خاص در سیستم شما اطلاعات اشتباهی را در محیط های حساس برنامه شما ارسال می کند ، اما شما نمی دانید که چه کسی این کار را انجام داده است.
Solution
ما میتوانیم این مشکل را با استفاده از Action Filter سفارشی شده حل کنیم . به این صورت که آن را بر روی Controller یا Action قرار بدهیم . با این کار میتوان رویداد هایی انجام شده را در جدولی که در بانک اطلاعاتی قرار دارد اضافه کرد . ابتدا میخواهیم یک فریم ورک ساده برای Action Filter سفارشی شده ایجاد کنیم .
public class AuditAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // Additional Auditing-based Logic Here base.OnActionExecuting(filterContext); } }
سازماندهی یک Audit رکورد ساده
پس از آن به نوع اطلاعاتی که میخواهیم در هر یک از رکورد های Audit ذخیره کنیم نیاز داریم بنابراین کلاس Audit را برای ذخیره مقدار ها ایجاد می کنیم و میتوان برای دسترسی به آن ها یک Context ایجاد کنیم . تعریف هر یک از فیلد های کلاس Audit :
AuditID : شناسه ای برای مجزا کردن Audit
UserName : نام کاربری ،کاربر انجام دهنده عمل
IPAddrress : آدرس IP کاربر انجام دهنده عمل
AreaAccessed : آدرس محلی که کاربر به آن دسترسی داشته است .
Timestamp : Timestamp نشان دهنده زمانی است که کاربر به محلی دسترسی داشته است .
مانند کد زیر :
public class Audit { // Audit Properties public Guid AuditID { get; set; } public string UserName { get; set; } public string IPAddress { get; set; } public string AreaAccessed { get; set; } public DateTime Timestamp { get; set; } // Default Constructor public Audit(){} }
حال میخواهیم بانک اطلاعاتی را پیاده سازی کنیم و رکورد های Audit را ذخیره کنیم . برای این کار قطعه کد زیر را در Web.Config وارد می کنیم .
<connectionStrings> <!-- Default Connection goes here --> <!-- Our Auditing Context --> <add name="AuditContext" connectionString="Data Source=.; Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>
ایجاد AuditAttribute
در این قسمت میخواهیم یک متد برای ذخیره و بازیابی رکورد های Audit در AuditAttribut ایجاد کنیم . و آن ها را بالای Controller ها یا Action ها قرار دهیم .
public class AuditAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // Stores the Request in an Accessible object var request = filterContext.HttpContext.Request; // Generate an audit Audit audit = new Audit() { // Your Audit Identifier AuditID = Guid.NewGuid(), // Our Username (if available) UserName = (request.IsAuthenticated) ? filterContext.HttpContext.User.Identity.Name : "Anonymous", // The IP Address of the Request IPAddress = request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? request.UserHostAddress, // The URL that was accessed AreaAccessed = request.RawUrl, // Creates our Timestamp TimeAccessed = DateTime.UtcNow }; // Stores the Audit in the Database AuditingContext context = new AuditingContext(); context.AuditRecords.Add(audit); context.SaveChanges(); // Finishes executing the Action as normal base.OnActionExecuting(filterContext); } }
حال میخواهیم صفت Audit را بر روی Controller ها و Action ها قرار دهیم .
بنابراین پس از ایجاد Action های Auditable زمانی که لاگین کنید ردپای شما در بانک اطلاعاتی ثبت خواهد شد .
پس از این که تمامی موارد مورد نیاز را انجام دادیم برای نمایش دادن Audit ها یک Action ایجاد می کنیم مانند کد زیر :
public ActionResult ViewAuditRecords() { var audits = new AuditingContext().AuditRecords; return View(audits); }
پس از این که Action را ایجاد کردید برنامه را Build کرده و آن را اجرا کنید .
آموزش asp.net mvc
- ASP.net MVC
- 1k بازدید
- 3 تشکر