پیاده سازی Audit Trail با استفاده از ActionFilters

پنجشنبه 13 آبان 1395

در این مقاله میخواهیم چگونگی پیاده سازی Audit Trail را در ASP.NET MVC را توضیح دهیم و از ActionFilter های سفارشی شده استفاده کنیم که به شما اجازه می دهد آن ها را در Controller ها قرار دهید و Action هایی که مشخص کرده ایم جزئیات را log می کنند.

پیاده سازی Audit Trail با استفاده از ActionFilters

مشکل

یک کاربر خاص در سیستم شما اطلاعات اشتباهی را در محیط های حساس برنامه شما ارسال می کند ، اما شما نمی دانید که چه کسی این کار را انجام داده است.

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

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید