标签: audit-logging

使用 Django 和 DRF 进行审计日志

我需要在我使用Django 1.8和的项目之一中实现审核日志功能Django-Rest-Framework 3.2.2。我已经扩展BaseUserManager class了创建用户模型,因为我必须在我的应用程序中使用电子邮件作为用户名(如果此信息很重要)。

下面是我的数据库设计,它将保存日志:

**fields    type    desc**

id           pk      ( auto_increment)  
cust_id   FK  customer 
customer_name   FK  customer
user_id FK  user
user_name   FK  user
module  Varchar(100) sales,order,billing,etc
action  Varchar(10) Create/Update/Delete
previous_value  varchar(500)    
current_value   varchar(500)    
Datetime    Datetime    timestamp of change
Run Code Online (Sandbox Code Playgroud)

我已经尝试过https://pypi.python.org/pypi/django-audit-log但根据我的要求它有两个问题 -

  1. 它没有按照我的要求捕获数据,我理解这是我的问题,因此我修改了它的代码并将我的字段添加到它的模型中。
  2. 它不捕获模块信息。行为是随机的。

我正在寻求建议以继续使用此功能。哪个包最适合我的任务。

PS我也尝试过Django-reversion,我没有数据版本控制的要求。

谢谢

python django audit-logging django-rest-framework django-auditlog

4
推荐指数
2
解决办法
7074
查看次数

CakePHP 3:访问​​模型中的当前用户

因为我是 CakePHP 的新手,所以我有一些无法弄清楚的简单问题。

我使用 CakePHP 3.4。我尝试编写一个简单的记录器功能。应用于记录的每个更改,我都希望记录到 ChangeLog 模型中。

使用 afterSave() 事件,我有以下代码:

public function afterSave($event, $entity, $options) {
  $logTable = TableRegistry::get('ChangeLogs');
  foreach ($entity->getDirty() as $key) {
    if($key != 'modified') {
      $record = $logTable->newEntity();
      $record->previous_value = $entity->getOriginal($key);
      $record->new_value = $entity[$key];
      $record->table_name = 'Stars';
      $record->column_name = $key;
      $record->row_id = $entity->id;
      $record->user_id = [what should i put here?]
      $record->user_id = $_SESSION['Auth']['user']['id'];
      $logTable->save($record);
    }
  }
Run Code Online (Sandbox Code Playgroud)

它运行良好,但我也想知道是哪个用户执行了操作,我不知道如何在模型中获取当前用户。

我尽量避免在控制器中传递参数,因为我希望自动检测用户,并且作为开发人员,我不想每次尝试在控制器中更改/添加新功能时都记住它。

authentication logging cakephp audit-logging cakephp-3.0

3
推荐指数
1
解决办法
1342
查看次数

在调用SaveChanges()之前访问添加实体的id

我正在使用EF 4.3.1,我已经覆盖了上下文中的SaveChanges(),这样我就可以获得对象及其状态的列表,并在我的审计日志表中创建条目.我需要将记录的id存储在审计日志表中,以便我对它进行引用.插入记录时会出现问题,因为在保存之前我无法访问id.有什么方法可以获得身份证吗?

public override int SaveChanges()
{
        ChangeTracker.DetectChanges();

        var objectStateManager = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager;
        var modifiedAuditableEntities = objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added).Where(e => (IAuditable)e.Entity != null);

        foreach (var entry in modifiedAuditableEntities)
        {
            var entity = (IAuditable)entry.Entity;

            if (entity != null)
            {
                switch (entry.State)
                {
                    case EntityState.Added:
                        entity.IsAdded = true;
                        break;
                    case EntityState.Deleted:
                        entity.IsDeleted = true;
                        break;
                    case EntityState.Modified:
                        entity.IsModified = true;
                        break;
                }

                this.EntitySet<AuditLogEntry>().Add(this.auditLogService.CreateAuditLogEntryForEntity((IAuditable)entry.Entity));
            }
        return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

entity-framework savechanges audit-logging

2
推荐指数
1
解决办法
2945
查看次数

NHibernate Envers版本信息的UTC时间戳

我正在使用NHibernate Envers 1.6.0并且需​​要使用UTC时间戳而不是本地REVINFO中的REVTSTMP列.

我知道已经报告了这个bug(NHE-122)并且已经修复了未来的2.0版本

有什么办法可以将DefaultRevisionInfoGenerator更改为我自己的自定义IRevisionInfoGenerator吗?

c# nhibernate audit-logging nhibernate-envers

2
推荐指数
1
解决办法
486
查看次数

Hibernate Envers如何工作?

我在我的一个项目中使用Hibernate envers.它工作得非常好并且完成了这项工作.

我试图了解envers的内部工作机制.

  1. envers如何在内部工作?

  2. 当实际事务成功并且审计表更新失败时会发生什么?整个交易会被回滚吗?

  3. 是否在与提供请求的实际线程不同的线程中执行envers?或者可以吗?

java hibernate change-data-capture hibernate-envers audit-logging

2
推荐指数
1
解决办法
1586
查看次数

ASP.NET Core 实体更改历史

我有很多这样的控制器:

public class EntityController : Controller
{
    private readonly IEntityRepository _entity;

    public EntityController(IEntityRepository entity)
    {
        _entity = entity;
    }

    [Authorize]
    [HttpPut("{id}")]
    public async ValueTask<IActionResult> Put(int id, [FromBody] Entity entity)
    {
        if (entity == null || entity.Id != id) return BadRequest();
        var updated = await _entity.Update(entity);
        if (updated == null) return NotFound();
        return Ok(updated);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要实现实体编辑(审计)历史。

而且,由于该方法被标记为[Authorize],我需要记录它是由哪个用户编辑的。我正在看Audit.NET,但我没有找到方法来做到这一点。

audit-logging entity-framework-core asp.net-core audit.net

2
推荐指数
1
解决办法
1785
查看次数

GCP 日志路由器接收器未将日志路由到主题?

上下文:我正在尝试通过日志接收器将 GCP 审核日志存储在 Pub/Sub 主题中,以便我可以在订阅中提取这些消息(并让第三方订阅该订阅)。

尝试的解决方案:
带有包含过滤器的日志接收器:logName:"cloudaudit.googleapis.com"将日志路由到-> Pub/Sub 主题以存储这些消息->订阅(基于拉取)以查看这些消息。

问题:来自接收器的日志似乎并未出现在主题中。当我尝试查看主题中的消息(通过单击 GCP GUI 中的“pull”)时,我没有收到任何消息,即使我确信审核日志存在(我针对上面的包含过滤器运行了查询)并继续非常频繁地生成。

问题:为什么日志没有路由到主题,或者为什么当我从主题拉取时主题没有显示日志?

logging producer-consumer audit-logging google-cloud-platform google-cloud-pubsub

2
推荐指数
1
解决办法
1407
查看次数