我需要在我使用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但根据我的要求它有两个问题 -
我正在寻求建议以继续使用此功能。哪个包最适合我的任务。
PS我也尝试过Django-reversion,我没有数据版本控制的要求。
谢谢
python django audit-logging django-rest-framework django-auditlog
因为我是 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)
它运行良好,但我也想知道是哪个用户执行了操作,我不知道如何在模型中获取当前用户。
我尽量避免在控制器中传递参数,因为我希望自动检测用户,并且作为开发人员,我不想每次尝试在控制器中更改/添加新功能时都记住它。
我正在使用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) 我正在使用NHibernate Envers 1.6.0并且需要使用UTC时间戳而不是本地REVINFO中的REVTSTMP列.
我知道已经报告了这个bug(NHE-122)并且已经修复了未来的2.0版本
有什么办法可以将DefaultRevisionInfoGenerator更改为我自己的自定义IRevisionInfoGenerator吗?
我在我的一个项目中使用Hibernate envers.它工作得非常好并且完成了这项工作.
我试图了解envers的内部工作机制.
envers如何在内部工作?
当实际事务成功并且审计表更新失败时会发生什么?整个交易会被回滚吗?
是否在与提供请求的实际线程不同的线程中执行envers?或者可以吗?
java hibernate change-data-capture hibernate-envers audit-logging
我有很多这样的控制器:
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,但我没有找到方法来做到这一点。
上下文:我正在尝试通过日志接收器将 GCP 审核日志存储在 Pub/Sub 主题中,以便我可以在订阅中提取这些消息(并让第三方订阅该订阅)。
尝试的解决方案:
带有包含过滤器的日志接收器:logName:"cloudaudit.googleapis.com"将日志路由到-> Pub/Sub 主题以存储这些消息->订阅(基于拉取)以查看这些消息。
问题:来自接收器的日志似乎并未出现在主题中。当我尝试查看主题中的消息(通过单击 GCP GUI 中的“pull”)时,我没有收到任何消息,即使我确信审核日志存在(我针对上面的包含过滤器运行了查询)并继续非常频繁地生成。
问题:为什么日志没有路由到主题,或者为什么当我从主题拉取时主题没有显示日志?
logging producer-consumer audit-logging google-cloud-platform google-cloud-pubsub
logging ×2
asp.net-core ×1
audit.net ×1
c# ×1
cakephp ×1
cakephp-3.0 ×1
django ×1
hibernate ×1
java ×1
nhibernate ×1
python ×1
savechanges ×1